Python模拟:如何根据输入值更改行为?
我有一个用python测试的类 我有一个被注入类的依赖项Python模拟:如何根据输入值更改行为?,python,unit-testing,mocking,inversion-of-control,Python,Unit Testing,Mocking,Inversion Of Control,我有一个用python测试的类 我有一个被注入类的依赖项 class UnderTest: def __init__(self, dependency): self.dependency = dependency 在这里,我并不真正关心依赖关系的内部,而是想模拟它 因此,我在测试中实例化该类,注入依赖项: dependency = MagicMock() dependency.some_func = MagicMock(return_value='blue') unde
class UnderTest:
def __init__(self, dependency):
self.dependency = dependency
在这里,我并不真正关心依赖关系的内部,而是想模拟它
因此,我在测试中实例化该类,注入依赖项:
dependency = MagicMock()
dependency.some_func = MagicMock(return_value='blue')
under_test = UnderTest(dependency)
稍后,当我想在测试下测试类时,我希望依赖项根据传递给它的参数返回不同的值。所以在测试的代码中,我可能有
value = dependency.some_func('a')
但我也希望当使用不同的值调用时,依赖项返回其他内容
value = dependency.some_func('b')
理想情况下(我在其他框架中也看到过),我可以配置mock以返回不同的值,例如(我希望它如何工作)
您可以使用该属性设置可调用项,该可调用项根据其参数返回不同的值
results = {'a': 'blue', 'b': 'green'}
dependency.some_func = MagicMock(side_effect=lambda arg: results.get(arg, DEFAULT))
(用于表示正常模拟返回值用于dict中未包含的参数)Perfect。非常感谢
results = {'a': 'blue', 'b': 'green'}
dependency.some_func = MagicMock(side_effect=lambda arg: results.get(arg, DEFAULT))