如何模拟和单元测试以下代码?

2024-04-26 21:33:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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=_____) 

Tags: fromimportreturnaswithargassertfilename
1条回答
网友
1楼 · 发布于 2024-04-26 21:33:04

如果createX不是一个问题(即db连接或网络访问),那么您可以在不模拟它的情况下进行测试。你知道吗

您有以下选择:

  1. 如果您不想检查方法如何调用something_mock,请使用mockcalled属性
  2. 如果要检查something_mock是否通过arg关键字arg调用了^{},但您对值不感兴趣,请使用^{}
  3. 使用^{}提取something_mock调用参数,并按calls as tuple提取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)

最后一个选项与mockX完全相同,但我编写它只是为了展示所有的可能性。你知道吗

相关问题 更多 >