[英]How to verify mock method not called in python?
In my code I am using assert_any_call() to verify series of call that happens to the django model filter, Now I need to verify the reverse case of this like assert_not_called(args). 在我的代码中,我使用assert_any_call()来验证Django模型过滤器发生的一系列调用,现在,我需要验证类似assert_not_call(args)的相反情况。
Is there any assert statement to achieve this in python? 是否有任何断言语句可以在python中实现?
The simplest way is to use Mock.call_args_list
: 最简单的方法是使用Mock.call_args_list
:
assert call(None, a=1, b="") not in mocked_func.call_args_list, "Called with invalid args."
If you want a method, use: 如果要使用方法,请使用:
class NotCalledMagicMock(unittest.mock.MagicMock):
def assert_not_called(_mock_self, *args, **kwargs):
self = _mock_self
if self.call_args is None:
return
expected = self._call_matcher((args, kwargs))
if any(self._call_matcher(ca) == expected for ca in self.call_args_list):
cause = expected if isinstance(expected, Exception) else None
raise AssertionError(
'%r found in call list' % (self._format_mock_call_signature(args, kwargs),)
) from cause
To use this class, put this decorator before your test function: 要使用此类,请将此装饰器放在测试函数之前:
@unittest.mock.patch("unittest.mock.MagicMock", NotCalledMagicMock)
Or make your mocks using: 或使用以下方法进行模拟:
func_b_mock = NotCalledMagicMock()
To use the method (where func_b_mock
is a mock generated by eg patch
): 要使用该方法(其中func_b_mock
是例如patch
生成的模拟):
func_b_mock.assert_not_called([12], a=4)
When it fails, it raises an AssertionError
like: 当失败时,它会引发一个AssertionError
如:
Traceback (most recent call last):
File "your_test.py", line 34, in <module>
test_a()
File "/usr/lib/python3.4/unittest/mock.py", line 1136, in patched
return func(*args, **keywargs)
File "your_test.py", line 33, in test_a
func_b_mock.assert_not_called([1])
File "your_test.py", line 20, in assert_not_called
) from cause
AssertionError: 'func_b([1])' found in call list
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.