1

我有一个MagicMock名为some_magic_mockcreated 的对象,用于使用补丁进行测试。

假设修补的对象是some_patched_object.

在被测代码中有一个调用:

some_patched_object.some_method -= some_parameter

(提醒:-=实际上是__isub__方法的语法糖)

现在,在测试代码中,我有以下几行:

print some_magic_mock.mock_calls
some_magic_mock.assert_has_calls([mock.call.some_method.__isub__(some_parameter)])
some_magic_mock.some_method.__isub__.assert_called_once_with(some_parameter)

所以会发生以下情况:

  1. print声明打印:[call.some_method.__isub__(some_parameter)]"
  2. 第一个断言 (assert_has_calls) 成功。
  3. 第二个断言失败并显示错误消息:Expected to be called once. Called 0 times.

我的印象是断言是相等的,除了第二个断言也call_count恰好是 1。

鉴于我所看到的,我也不明白为什么第二个断言会失败mock_calls

总的来说,我觉得我在这里遗漏了一些细微差别,并且很乐意为我清除它。

编辑1:

对于那些问的人:
这是我的代码的复制粘贴,实际名称更改为“some_X”和“expected_X”,这与上面的内容基本相同:

print self.some_magic_mock.mock_calls  
print self.some_magic_mock.some_method.__isub__.mock_calls  

self.some_magic_mock.assert_has_calls([mock.call.some_method.__isub__(expected_param)])
self.some_magic_mock.some_method.__isub__.assert_called_once_with(expected_param)

第一次打印产量:[call.some_method.__isub__(expected_param)]
第二次打印产量:[]

第一个断言通过。
第二个断言失败。

4

0 回答 0