Vit*_*ich 3 python unit-testing pytest python-unittest
在unittest我可以用值断言side_effect可迭代 - 当调用修补方法时,每个值都会一一返回,而且我发现在unittest我的修补方法中可以根据输入参数返回不同的结果。我可以在 pytest 中做类似的事情吗?文档没有提到这一点。
您可以使用 Mock 的side_effect参数来设置每次调用返回的内容。
side_effect:每当调用 Mock 时都会调用的函数。请参阅 side_effect 属性。对于引发异常或动态更改返回值很有用。使用与模拟相同的参数调用该函数,除非它返回 DEFAULT,否则该函数的返回值将用作返回值。另外,side_effect 可以是异常类或实例。在这种情况下,调用模拟时将引发异常。如果 side_effect 是一个可迭代对象,那么每次调用模拟都会返回该可迭代对象的下一个值。side_effect 可以通过将其设置为 None 来清除。
例如:
return_data = [3, 5]
test_mock = Mock(side_effect=return_data)
monkeypatch.setattr(your_module, "some_func", test_mock)
Run Code Online (Sandbox Code Playgroud)
这样,第一次调用“some_func”时,它将返回 3,第二次调用时,它将返回 5
如果被调用两次就可以了
assert test_mock.call_count == len(return_data)
Run Code Online (Sandbox Code Playgroud)
返回数据应该是 Iterable(列表、集合、元组)并且可以包含您想要的任何内容(整数、字符串、对象、元组、列表...)
| 归档时间: |
|
| 查看次数: |
3361 次 |
| 最近记录: |