模拟是用于Python测试的库。 它允许您用模拟对象替换被测系统的各个部分,并声明它们的使用方式。 本教程将详细讨论什么是模拟以及如何在Python应用程序中使用它。
什么是模拟?
Mocking是一个用于Python测试的库,该库允许您使用模拟对象替换被测系统的各个部分,并对它们的使用方式进行断言。
在Python中,通过使用unittest.mock模块将系统的各个部分替换为模拟对象来完成模拟。 该模块包含许多有用的类和函数,即补丁函数(作为装饰器和上下文管理器)和MagicMock类。 这两个组件对于在Python中实现模拟非常重要。
模拟函数调用通常会立即返回预定义的值。 测试中还定义了模拟对象的属性和方法,而无需创建真实对象。
模拟还允许您在编写测试时为每个函数调用返回预定义的值。 这使您可以在测试时拥有更多控制权。
先决条件
Mock在Python 3中可用,但是如果您在下面使用Python版本
3.3,仍然可以通过将unittest.mock
导入为单独的库来使用它,就像这样。
$ pip install mock
模拟的好处
嘲笑的一些好处包括:
- 避免过多的依赖关系。 模拟减少了对功能的依赖。 例如,如果您有一个依赖于函数B的函数A类,则需要编写一些单元测试来涵盖函数B所提供的功能。假设将来代码会增长,并且您将拥有更多的函数,即A取决于在B上,B取决于C,C取决于D。如果在Z中引入了故障,则所有单元测试都将失败。
- 减少过载。 这适用于资源密集型功能。 对该功能的模拟将减少测试期间不必要的资源使用,从而减少测试运行时间。
- 绕过功能中的时间限制。 这适用于预定的活动。 想象一个计划每小时执行一次的进程。 在这种情况下,模拟时间源可以使您实际对这种逻辑进行单元测试,这样您的测试就不必花费数小时来等待时间的流逝。
用法
mock
用法很简单:
>>> from mock import Mock
&g