4

MagicMock子モック オブジェクト インスタンスの親モック オブジェクト インスタンス、または親モック オブジェクト インスタンスの子を識別することは可能ですか? たとえば、次のコードがある場合

>>> from unittest.mock import MagicMock
>>> parent_mock = MagicMock()
>>> child_mock1 = parent_mock(a=1)
>>> child_mock2 = parent_mock(b='spam')

子モックが呼び出しから生成されたことを後で確認するにはどうすればよいparent_mockですか? どのモックオブジェクトparent_mockが生成されたかを確認するにはどうすればよいですか?

child_mock1また、特に call から発信されたものと、parent_mock(a=1)callから発信されたものを区別するにはどうすればよいですか?child_mock2parent_mock(b='spam')

モックを他のモックの属性として手動でアタッチできることは理解していますが、指定された子モックを返すように、親モックの戻り呼び出しを明示的に定義する必要があるという点で、かなりの設定が必要です。そのため、数回の呼び出しを超えるとうまくスケーリングしません。

4

2 に答える 2

2

そこで気をつけて!

26.4.2.1. 通話中

モック オブジェクトは呼び出し可能です。この呼び出しは、return_value 属性として設定された値を返します。デフォルトの戻り値は新しい Mock オブジェクトです。戻り値が最初にアクセスされたときに作成されます (明示的に、またはモックを呼び出すことによって) - ただし、保存され、毎回同じものが返されます。

異なる呼び出しで異なる結果を得たい場合は、モックにside_effect属性を与える必要があります。mock.side_effectが関数の場合は、それmock(*args, **kwargs)が返すものを呼び出しmock.side_effect(*args, **kwargs)て返します。mock.side_effectどの呼び出しがどの値を生成したかをカスタム キープで追跡できます。

于 2013-06-07T04:09:55.067 に答える