【问题标题】:Python MagicMock assert_called_once_with not taking into account arguments?Python MagicMock assert_called_once_with 不考虑参数?
【发布时间】:2018-12-10 16:53:55
【问题描述】:

我正在设置一个 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.

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

【问题讨论】:

  • 也用 Python 3.6 和 3.7 测试过

标签: python mocking python-3.5 magicmock


【解决方案1】:

我们发现 assert_call_with 确实是我们想要的。

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

【讨论】:

    【解决方案2】:

    来自unittest.mockdocs

    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中指定的顺序使用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2014-01-20
      • 2019-09-11
      • 2018-06-22
      • 1970-01-01
      相关资源
      最近更新 更多