Python MagicMock assert_call_once_with不考虑参数?

时间:2018-12-10 16:53:56

标签: python mocking python-3.5 magicmock

我正在设置MagicMock实例,使用不同的参数两次调用相同的方法,并将我的断言设置为仅对一组参数进行验证。

Python:3.5.2

from unittest.mock import MagicMock

my_mock = MagicMock()
my_mock.some_method()
my_mock.some_method(123)

my_mock.some_method.assert_called_once_with(123)

AssertionError: Expected 'some_method' to be called once. Called 2 times.

我希望这会过去。为什么它会忽略参数?

2 个答案:

答案 0 :(得分:0)

我们发现assert_call_with实际上就是我们想要的。

这似乎令人困惑,我认为应该将其命名为assert_linked_only_once_with。

答案 1 :(得分:0)

来自unittest.mock docs

  

断言_once_with(* args,** kwargs)

     

断言该模拟只被调用了一次,并且该调用是使用指定的参数进行的。

由于您两次调用该方法,因此应该会失败。

在这种情况下,您可以使用:

expected_calls = [call(), call(123)]
my_mock.some_method.assert_has_calls(expected_calls, any_order=False)

将断言预期的呼叫已按照expected_calls

中指定的顺序使用