Ich verwende das Python-Mock-Modul für Tests. Ich möchte interne Methodenaufrufe ausspionieren, die von einem Live-Objekt ausgeführt werden. Ich entdeckte, dass die kwarg kann ‚Wraps‘ verwendet werden, um ein Mock einrichten, die auf Verfahren spioniert ruft zu einem Live-Objekt:Verwenden von Python Mock-Bibliothek zum Ausspionieren interner Methodenaufrufe
Using Python mock to spy on calls to an existing object
aber das funktioniert nicht für interne Anrufe. Ich möchte das verwenden, um zu testen, dass eine Methode auf höherer Ebene Methoden der niedrigeren Ebene in der richtigen Reihenfolge aufruft.
Gegeben:
class ClassUnderTest(object):
def lower_1(self):
print 'lower_1'
def lower_2(self):
print 'lower_2'
def higher(self):
self.lower_1()
self.lower_2()
ich mag es testen können als
import mock
DUT = ClassUnderTest()
mock_DUT = mock.Mock(wraps=DUT)
# test call
mock_DUT.higher()
# Assert that lower_1 was called before lower_2
assert mock_DUT.mock_calls[1:] = [mock.call.lower_1(), mock.call.lower_2()]
Dies funktioniert nicht, da die ‚Selbst‘ Parameter höher() sind auf den ursprünglichen DUT gebunden Objekt, und nicht der Mock_DUT Spion. Daher wird nur der anfängliche Aufruf von high() in mock_calls protokolliert. Gibt es eine bequeme Möglichkeit, diese Art von Assertion mit dem Python-Mock-Modul durchzuführen?