1. ホーム
  2. パイソン

[解決済み】入力引数に基づくpython関数のモッキング

2022-04-09 11:44:55

質問

私たちは、これまで モック を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")

モックで同じことを実現する方法を探しているのですが、うまくいきません。

何かアイデアはありますか?

解決方法は?

<ブロッククオート

もし 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