3

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

蟒蛇: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.

我希望这会通过。为什么它忽略这些论点?

4

2 回答 2

4

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

这似乎令人困惑,我认为它应该被称为 assert_called_only_once_with。

于 2018-12-10T17:03:41.400 回答
3

unittest.mock 文档

assert_call_once_with(*args, **kwargs)

断言模拟只被调用了一次,并且该调用带有指定的参数。

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

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

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

这将断言预期的调用已按指定的顺序使用expected_calls

于 2018-12-10T17:04:38.500 回答