Fix Python – Mocking python function based on input arguments


Asked By – Juan Antonio Gomez Moriano

We have been using Mock for python for a while.

Now, we have a situation in which we want to mock a function

def foo(self, my_param):
    #do something here, assign something to my_result
    return my_result

Normally, the way to mock this would be (assuming foo being part of an object) = MagicMock(return_value="mocked!")

Even, if i call foo() a couple of times i can use = MagicMock(side_effect=["mocked once", "mocked twice!"])

Now, I am facing a situation in which I want to return a fixed value when the input parameter has a particular value. So if let’s say “my_param” is equal to “something” then I want to return “my_cool_mock”

This seems to be available on mockito for python


I have been searching on how to achieve the same with Mock with no success?

Any ideas?

Now we will see solution for issue: Mocking python function based on input arguments


If side_effect_func is a function then whatever that function returns is
what calls to the mock return. The side_effect_func function is called with
the same arguments as the mock. This allows you to vary the return
value of the call dynamically, based on the input:

>>> def side_effect_func(value):
...     return value + 1
>>> m = MagicMock(side_effect=side_effect_func)
>>> m(1)
>>> m(2)
>>> m.mock_calls
[call(1), call(2)]

This question is answered By – Amber

This answer is collected from stackoverflow and reviewed by FixPython community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0