Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python mock.mock_reset()返回mock,而不是重置mock_Python_Mocking - Fatal编程技术网

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()]