別のクラス (CUT の init メソッドに渡されるインスタンス) に依存するクラスをテストしています。Python Mock ライブラリを使用して、このクラスをモックアウトしたいと考えています。
私が持っているのは次のようなものです:
mockobj = Mock(spec=MyDependencyClass)
mockobj.methodfromdepclass.return_value = "the value I want the mock to return"
assertTrue(mockobj.methodfromdepclass(42), "the value I want the mock to return")
cutobj = ClassUnderTest(mockobj)
これは問題ありませんが、「methodfromdepclass」はパラメーター化されたメソッドであるため、methodfromdepclass に渡される引数に応じて異なる値を返す単一のモック オブジェクトを作成したいと考えています。
このパラメーター化された動作が必要な理由は、異なる値 (mockobj から返される値によって生成される値) を含む ClassUnderTest の複数のインスタンスを作成したいからです。
ちょっと私が考えていること(これはもちろんうまくいきません):
mockobj = Mock(spec=MyDependencyClass)
mockobj.methodfromdepclass.ifcalledwith(42).return_value = "you called me with arg 42"
mockobj.methodfromdepclass.ifcalledwith(99).return_value = "you called me with arg 99"
assertTrue(mockobj.methodfromdepclass(42), "you called me with arg 42")
assertTrue(mockobj.methodfromdepclass(99), "you called me with arg 99")
cutinst1 = ClassUnderTest(mockobj, 42)
cutinst2 = ClassUnderTest(mockobj, 99)
# now cutinst1 & cutinst2 contain different values
この「ifcallwith」のようなセマンティクスを実現するにはどうすればよいですか?