为每次调用模拟返回不同的值

💡 原文英文,约500词,阅读约需2分钟。
📝

内容提要

本文讨论了如何在单元测试中使用unittest.mock.Mock的side_effect功能来模拟函数的不同返回值,包括处理异常情况。示例代码展示了如何为多个外部调用返回不同结果,并使用spec_set=True确保模拟对象的严格性。

🎯

关键要点

  • 在单元测试中,可以使用unittest.mock.Mock的side_effect功能来模拟函数的不同返回值。
  • side_effect可以是一个值的列表,每个值对应一次调用的返回值。
  • 要模拟异常情况,可以将列表中的一个元素设置为实际的异常。
  • 示例代码展示了如何为多个外部调用返回不同结果,并处理超时和错误响应。
  • 使用spec_set=True可以确保模拟对象的严格性,避免意外创建不存在的属性。

延伸问答

如何在单元测试中使用unittest.mock.Mock的side_effect功能?

可以通过将side_effect设置为一个值的列表来模拟函数的不同返回值,每个值对应一次调用的返回值。

如何模拟函数调用中的异常情况?

可以在side_effect列表中设置一个元素为实际的异常,以模拟异常情况。

使用spec_set=True有什么好处?

使用spec_set=True可以确保模拟对象的严格性,避免意外创建不存在的属性。

能否给出一个使用side_effect的示例代码?

示例代码中,mock_responses列表包含不同的MockResponse对象和一个TimeoutError,用于测试fetch_product_data函数。

如何处理多个外部调用的不同返回结果?

可以为每个外部调用设置不同的返回值,通过side_effect列表实现。

在测试中如何确保mock对象的属性正确?

通过使用spec_set=True,可以确保mock对象的属性与真实对象一致,避免错误。

➡️

继续阅读