Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python模拟:如何根据输入值更改行为?_Python_Unit Testing_Mocking_Inversion Of Control - Fatal编程技术网

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

我有一个用python测试的类

我有一个被注入类的依赖项

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))