import module
from x import X
class A:
def method():
return module.something(arg=X())
我创建了以下单元测试:
with patch('filename.module.something') as something_mock:
with patch('filename.X'): as x_mock:
a.method()
something_mock.assert_called_once_with(arg=x_mock.return_value)
x_mock.assert_called_once_with()
有人提到没有解释就没有必要模仿filenme.X
。还有其他方法可以验证对something
的调用而不会模仿filename.X
吗?如何更改以下断言以验证通话?
something_mock.assert_called_once_with(arg=_____)
答案 0 :(得分:-1)
如果创建X
不是问题(即数据库连接或网络访问),您可以在不模拟的情况下进行测试。
您有以下选择:
mock
called
的{{1}}属性
something_mock
已通过something_mock
关键字arg调用,但您对价值是什么感兴趣,请使用mock.ANY
call_args
提取arg
个调用参数,并calls as tuple提取something_mock
值第一个是
arg
第二个是
assert something_mock.called
最后第三个是
something_mock.assert_called_once_with(arg=mock.ANY)
最后一个选项与模拟args, kwargs = something_mock.call_args
assert isinstance(kwarg['arg'], x.X)
完全相同,但我写的只是为了展示所有可能性。