使用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()
答案 0 :(得分:1)
发现了这个问题。
由于模拟创建的一些复杂的方式,我在一个已修补的模块上调用patch()
,即我正在修补Mock()
对象。由于补丁程序调用{{1}}为autospec
,因此True
已修补。
解决方案是简化模拟创建流程。