У меня есть класс, который я тестирую, который имеет в качестве зависимости другой класс (экземпляр которого передается методу init CUT). Я хочу макетировать этот класс с помощью библиотеки 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, которые содержат разные значения (значения которых создаются тем, что возвращается из mockobj).
Что-то, о чем я думаю (это, конечно, не работает):
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
Как мне добиться такой семантики "ifcalledwith"?