我正在设置一个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.
我希望这件事能通过。为什么它忽略了这些争论?
我们发现assert_colled_with实际上就是我们想要的。
它看起来很混乱,我认为应该称为assert_called_only_once_with。
来自unittest.mock
文档:
assert_colled_once_with(*args,**kwargs(
断言mock只调用过一次,并且该调用带有指定的参数。
由于您要调用该方法两次,因此应该会失败。
在这种特定情况下,您可以使用:
expected_calls = [call(), call(123)]
my_mock.some_method.assert_has_calls(expected_calls, any_order=False)
它将断言预期的调用已按expected_calls
中指定的顺序使用