Gibt es eine saubere Möglichkeit, ein Objekt zu patchen, so dass Sie die assert_call*
Helfer in Ihrem Testfall erhalten, ohne die Aktion tatsächlich zu entfernen?Python Mock - Patchen einer Methode ohne Behinderung der Implementierung
Zum Beispiel, wie kann ich die @patch
Linie ändern Sie den folgenden Test bestanden zu erhalten:
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 wahrscheinlich hacken zusammen mit side_effect
, aber ich hatte gehofft, es wäre ein schöner Weg sein, die das Werk gleiche Art und Weise auf alle Funktionen, Class, staticmethods, ungebundenen Methoden etc.
'foo' und' bar' sind nicht richtig definiert. Sie sollten 'def foo (self, n)' und 'def bar (self, n)' sein. – chepner
ja, danke ... fixed – wim
Es gibt auch nicht viel zu behaupten, dass 'foo' aufgerufen wurde, da der Test es selbst aufruft, anstatt irgendein anderer Code, der getestet wird. Ebenso scheint das Testen von 'vierzig_zwei 'auf einen bestimmten Wert durch Ihren * Test * und nicht den getesteten Code von geringem Wert zu sein. – chepner