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