代码之家  ›  专栏  ›  技术社区  ›  Nathan Wailes

Python—如何断言没有使用特定参数调用模拟对象?

  •  0
  • Nathan Wailes  · 技术社区  · 6 年前

    我意识到 unittest.mock assert_not_called 方法可用,但我要找的是 assert_not_called_with . 有类似的东西吗?我看了谷歌,什么也没看到,当我试着使用 mock_function.assert_not_called_with(...) 它引发了 AttributeError ,表示函数不存在该名称。

    with self.assertRaises(AssertionError):
        mock_function.assert_called_with(arguments_I_want_to_test)
    

    如果我有几个这样的调用,这可以工作,但会使代码混乱。

    相关的

    Assert a function/method was not called using Mock

    0 回复  |  直到 6 年前
        1
  •  11
  •   blhsing    6 年前

    您可以添加 assert_not_called_with 方法到 unittest.mock.Mock

    from unittest.mock import Mock
    
    def assert_not_called_with(self, *args, **kwargs):
        try:
            self.assert_called_with(*args, **kwargs)
        except AssertionError:
            return
        raise AssertionError('Expected %s to not have been called.' % self._format_mock_call_signature(args, kwargs))
    
    Mock.assert_not_called_with = assert_not_called_with
    

    以便:

    m = Mock()
    m.assert_not_called_with(1, 2, a=3)
    m(3, 4, b=5)
    m.assert_not_called_with(3, 4, b=5)
    

    输出:

    AssertionError: Expected mock(3, 4, b=5) to not have been called.