我有一个正在测试的类,该类具有依赖关系的另一个类(该类的实例被传递给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来返回不同的值。
我想要此参数化行为的原因是我想创建ClassUnderTest的多个实例,这些实例包含不同的值(其值由从嘲笑对象返回的值产生)。
Kinda我在想什么(这当然行不通):
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
如何实现这种“ ifwithwith”语义?