python mock.mock_reset()返回mock,而不是重置mock
在使用库时,我遇到了这样一种情况:调用python mock.mock_reset()返回mock,而不是重置mock,python,mocking,Python,Mocking,在使用库时,我遇到了这样一种情况:调用my\u mock.reset\u mock()方法返回一个新的mock实例,而不是重置my\u mock。显然,我不知怎么地屏蔽了Mock.reset\u Mock(),但我不知道这是怎么发生的 示例运行(Python 2.7): >>mocks.normal\u mock.mock\u调用 输出[6]:[] >>>mocks.normal\u mock.reset\u mock() >>>mocks.normal\u mock.mock\u调用 Out[
my\u mock.reset\u mock()
方法返回一个新的mock
实例,而不是重置my\u mock
。显然,我不知怎么地屏蔽了Mock.reset\u Mock()
,但我不知道这是怎么发生的
示例运行(Python 2.7):
>>mocks.normal\u mock.mock\u调用
输出[6]:[]
>>>mocks.normal\u mock.reset\u mock()
>>>mocks.normal\u mock.mock\u调用
Out[8]:[]
>>>mocks.normal\u mock.mock\u调用
输出[2]:[]
>>>mocks.normal_mock.reset_mock()
>>>
>>>mocks.normal\u mock.mock\u调用
Out[4]:[call.reset_mock()]
你知道这是什么原因吗
其他信息:
- 所有模拟都封装在指定的类中,该类实例化一次,并在
unittest.TestCase.tearDown()中的测试之间重置
- 所有模拟都是在一些修补过的对象/方法/模块上调用
创建的patch.start()
- 在我的示例中,正常模拟和异常模拟都模拟了UUT导入的模块(每个模块不同)
patch()
,也就是说,我在打一个mock()
对象。由于修补程序调用的autospec
为True
,mock_reset()
已修补
解决方案是简化模拟创建流程。模拟从何而来?
mock.normal\u mock
和mock.normal\u mock
?你能展示产生它们的代码吗?(另外,如果reset_mock()
返回一个新的mock,则会有显示返回值的输出。)@user2357112-显示所有代码将是压倒性的。我已经添加了一些关于如何创建模拟的更多信息-我希望这些信息足够了。你真的在解释器中尝试过吗?输出格式看起来像是您输入了您认为如果问题与您的心智模型匹配会发生的情况;至少有一部分看起来不像实际的解释器输出。请确保您确实测试了一些东西,否则您将错过解决问题的机会或缩小原因。@user2357112-是的,这是PyCharm交互控制台的实际输出。为了简洁起见,我更改了模拟的名称。
>>> 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()]