我们已经将Mock用于python已有一段时间了。
现在,我们要模拟一个函数
def foo(self, my_param): #do something here, assign something to my_result return my_result
通常,模拟此方法的方式是(假设foo是对象的一部分)
self.foo = MagicMock(return_value="mocked!")
即使我多次调用foo()也可以使用
self.foo = MagicMock(side_effect=["mocked once", "mocked twice!"])
现在,我面临一种情况,当输入参数具有特定值时,我想返回一个固定值。因此,如果说“ my_param”等于“ something”,那么我想返回“ my_cool_mock”
这似乎可在python的嘲笑上使用
when(dummy).foo("something").thenReturn("my_cool_mock")
我一直在寻找如何通过Mock实现相同的目标而没有成功?
有任何想法吗?
如果side_effect是一个函数,那么该函数返回的值就是对模拟返回值的调用。使用side_effect与模拟相同的参数调用该函数。这使您可以根据输入动态地更改调用的返回值: >>> def side_effect(value): ... return value + 1 ... >>> m = MagicMock(side_effect=side_effect) >>> m(1) 2 >>> m(2) 3 >>> m.mock_calls [call(1), call(2)]
如果side_effect是一个函数,那么该函数返回的值就是对模拟返回值的调用。使用side_effect与模拟相同的参数调用该函数。这使您可以根据输入动态地更改调用的返回值:
side_effect
>>> def side_effect(value): ... return value + 1 ... >>> m = MagicMock(side_effect=side_effect) >>> m(1) 2 >>> m(2) 3 >>> m.mock_calls [call(1), call(2)]
http://www.voidspace.org.uk/python/mock/mock.html#calling