入力引数に基づいてPython関数をモックする 質問する

入力引数に基づいてPython関数をモックする 質問する

私たちはモックしばらくの間、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 の mockito

when(dummy).foo("something").thenReturn("my_cool_mock")

Mock で同じことを実現する方法を探していましたが、成功しませんでした。

何か案は?

ベストアンサー1

side_effect_funcが関数である場合、その関数が返すものは何でも、モックの呼び出しが返すものになります。side_effect_func関数は、モックと同じ引数で呼び出されます。これにより、入力に基づいて呼び出しの戻り値を動的に変更することができます。

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

http://www.voidspace.org.uk/python/mock/mock.html#calling

おすすめ記事