我有一个类,我试图用python中的测试来覆盖。
我有一个依赖关系被注入课堂。
class UnderTest:
def __init__(self, dependency):
self.dependency = dependency
我并不真正关心依赖的内部,并且想要嘲笑它。
所以我在测试中实例化了类,注入了依赖项:
dependency = MagicMock()
dependency.some_func = MagicMock(return_value='blue')
under_test = UnderTest(dependency)
稍后当我想测试类UnderTest
时,我希望依赖项根据传递给它的参数返回不同的值。所以在测试代码中,我可能会有类似
value = dependency.some_func('a')
但我也希望依赖项在使用不同的值调用时返回其他内容。
value = dependency.some_func('b')
理想情况下(我已在其他框架中看到过这种情况),我可以配置mock来返回不同的值,例如(我希望它如何工作)
dependency.some_func = MagicMock([
{'called_with': 'a', 'return_value': 'blue'},
{'called_with': 'b', 'return_value': 'green'}
])
答案 0 :(得分:1)
您可以使用side_effect
属性设置一个callable,该callable根据其参数返回不同的值。
results = {'a': 'blue', 'b': 'green'}
dependency.some_func = MagicMock(side_effect=lambda arg: results.get(arg, DEFAULT))
(DEFAULT
singleton用于表示正常模拟返回值用于不在dict中的参数。)