在python中用不同的值模拟一个方法两次

Che*_*tan 2 python python-unittest

我必须模拟如下所示的方法:

实际的python方法

import json
def some_method(self):
    output_one = json.loads(varone)
    output_two = json.loads(vartwo)
Run Code Online (Sandbox Code Playgroud)

测试方法

import json
self.stubs = stubout.StubOutForTesting()
self.stubs.Set(json, "loads", lambda *a: output_one)
self.stubs.Set(json, "loads", lambda *a: output_two)
Run Code Online (Sandbox Code Playgroud)

结果是看到只有output_two因为output_one被覆盖了。我应该如何模拟一个方法两次并期望每次都有不同的输出。

pba*_*rio 5

使用side_effect

来自文档的示例:

>>> mock = Mock()
>>> mock.side_effect = [3, 2, 1]
>>> mock(), mock(), mock()
(3, 2, 1)
Run Code Online (Sandbox Code Playgroud)