Roy*_*Roy 3 python mocking python-3.x python-unittest
假设我有一个模拟对象(让它成为Mock或MagicMock).我想模拟其中一个方法为特定输入返回一个值,并为另一个特定输入返回另一个值.如何在不必关心输入发送到方法的顺序的情况下执行此操作?
伪代码:
def test_blah():
o = MagicMock()
# How to do I these?
o.foo.return_value.on(1) = 10
o.foo.return_value.on(2) = 20
assert o.foo(2) == 20
assert o.foo(1) == 10
Run Code Online (Sandbox Code Playgroud)
由于您需要动态更改返回值,您需要使用side_effect而不是使用return_value.您可以将所需的返回值映射到预期的输入,并使用.get此映射/字典的功能作为副作用:
return_values = {1: 10, 2: 20}
o.foo.side_effect = return_values.get
Run Code Online (Sandbox Code Playgroud)
演示:
In [1]: from unittest import mock
In [2]: m = mock.MagicMock()
In [3]: return_values = {1: 10, 2: 20}
In [4]: m.foo.side_effect = return_values.get
In [5]: m.foo(1)
Out[5]: 10
In [6]: m.foo(2)
Out[6]: 20
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
862 次 |
| 最近记录: |