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

4 投票
2 回答
8483 浏览
提问于 2025-04-18 05:32

我需要模拟下面这个方法:

实际的 Python 方法

import json
def some_method(self):
    output_one = json.loads(varone)
    output_two = json.loads(vartwo)

测试方法

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

我看到的结果只有output_two,因为output_one被覆盖掉了。
我应该怎么做才能模拟一个方法两次,并且每次都得到不同的输出呢?

2 个回答

0

你需要把代码分成两个测试函数。

def test_output_one():
    self.stubs = stubout.StubOutForTesting()
    self.stubs.Set(json, "loads", lambda *a: output_one)
    ... code for the first test here ...

def test_output_two():
    self.stubs = stubout.StubOutForTesting()
    self.stubs.Set(json, "loads", lambda *a: output_two)
    ... code for the second test here ...
10

使用 side_effect

下面是文档中的一个例子:

>>> mock = Mock()
>>> mock.side_effect = [3, 2, 1]
>>> mock(), mock(), mock()
(3, 2, 1)

撰写回答