Od jakiegoś czasu używamy Mocka dla Pythona.
Teraz mamy sytuację, w której chcemy mockować funkcję
def foo(self, my_param):
#do something here, assign something to my_result
return my_result
Zwykle sposobem na kpienie z tego byłoby (zakładając, że foo jest częścią obiektu)
self.foo = MagicMock(return_value="mocked!")
Nawet jeśli kilka razy wywołam foo (), mogę użyć
self.foo = MagicMock(side_effect=["mocked once", "mocked twice!"])
Teraz mam do czynienia z sytuacją, w której chcę zwrócić stałą wartość, gdy parametr wejściowy ma określoną wartość. Więc jeśli powiedzmy, że „my_param” jest równe „coś”, chcę zwrócić „my_cool_mock”
Wydaje się, że jest to dostępne w mockito dla Pythona
when(dummy).foo("something").thenReturn("my_cool_mock")
Szukałem, jak osiągnąć to samo z Mockiem bez powodzenia?
Jakieś pomysły?
monkeypatch
. Monkeypatch jest bardziej dla „zastąpienia tej funkcji ze względu na testowanie”, podczas gdy Mock jest tym, czego używasz, gdy chcesz również sprawdzić mock_calls
lub stwierdzić, z czym została wywołana i tak dalej. Jest miejsce na jedno i drugie i często używam obu w różnych momentach w danym pliku testowym.