python mock.mock_reset()返回mock而不是重置mock

时间:2013-08-20 07:32:53

标签: python mocking

使用mock库时,遇到调用my_mock.reset_mock()方法返回新Mock实例而不是重置my_mock的情况。显然我在掩饰Mock.reset_mock(),但我无法弄清楚这是怎么发生的。

示例运行(Python 2.7):

>>> mocks.normal_mock.mock_calls
Out[6]: []
>>> mocks.normal_mock.reset_mock()
>>> mocks.normal_mock.mock_calls
Out[8]: []
>>> mocks.abnormal_mock.mock_calls
Out[2]: []
>>> mocks.abnormal_mock.reset_mock()
>>> <MagicMock name='abnormal_mock.reset_mock()' id='157604104'>
>>> mocks.abnormal_mock.mock_calls
Out[4]: [call.reset_mock()]

知道可能导致这种情况的原因吗?

其他信息:

  • 所有模拟都封装在指定的类中,该类被实例化一次,并在unittest.TestCase.tearDown()中的测试之间重置。
  • 在一些修补的对象/方法/模块
  • 上创建所有模拟调用patch.start()
  • 我的示例中的正常和异常模拟都模拟了UUT导入的模块(每个模块都有一个不同的模块)

1 个答案:

答案 0 :(得分:1)

发现了这个问题。

由于模拟创建的一些复杂的方式,我在一个已修补的模块上调用patch(),即我正在修补Mock()对象。由于补丁程序调用{​​{1}}为autospec,因此True已修补。

解决方案是简化模拟创建流程。