Gibt es eine saubere Möglichkeit, ein Objekt zu patchen, damit Sie die assert_call*Helfer in Ihrem Testfall erhalten, ohne die Aktion tatsächlich zu entfernen?
Wie kann ich beispielsweise die @patchZeile ändern , um den folgenden Test zu bestehen:
from unittest import TestCase
from mock import patch
class Potato(object):
def foo(self, n):
return self.bar(n)
def bar(self, n):
return n + 2
class PotatoTest(TestCase):
@patch.object(Potato, 'foo')
def test_something(self, mock):
spud = Potato()
forty_two = spud.foo(n=40)
mock.assert_called_once_with(n=40)
self.assertEqual(forty_two, 42)
Ich könnte dies wahrscheinlich zusammen mit hacken side_effect, aber ich hatte gehofft, dass es einen schöneren Weg gibt, der bei allen Funktionen, Klassenmethoden, statischen Methoden, ungebundenen Methoden usw. gleich funktioniert.
fooaufgerufen wurde, da der Test selbst ihn aufruft und nicht irgendein anderer Code, der getestet wird. Ebenso scheintforty_twodas Testen , das von Ihrem Test auf einen bestimmten Wert festgelegt wird , und nicht der getestete Code, von geringem Wert zu sein.