Ich habe eine Python-Datei a.py
, die zwei Klassen A
und B
enthält.
Ich möchte method_b
in der Klasse B
durch Spotten von A
zusammenführen. Hier ist der Inhalt der Datei testa.py
für diesen Zweck:
Ich erwarte, Mocked A
in der Ausgabe zu erhalten. Aber was ich bekomme ist:
Wo mache ich falsch?
Wenn Sie @mock.patch('a.A')
angeben, ersetzen Sie die Klasse A
im getesteten Code durch mock_a
.
In B.method_b
setzen Sie dann a = A()
, was jetzt a = mock_a()
ist - also a
ist return_value
von mock_a
. Da Sie diesen Wert nicht angegeben haben, handelt es sich um ein reguläres MagicMock
; Dies ist auch nicht konfiguriert, daher erhalten Sie die Standardantwort (noch ein MagicMock
), wenn Methoden darauf aufgerufen werden.
Stattdessen möchten Sie das return_value
von mock_a
konfigurieren, um die geeignete Methode zu haben, die Sie folgendermaßen ausführen können:
oder, vielleicht noch expliziter:
%Vor% Ihr Code hätte im Fall a = A
funktioniert (Zuweisung der Klasse, keine Instanz erstellen), da dann a.method_a()
Ihre Mock-Methode ausgelöst hätte.
Tags und Links python python-unittest magicmock