Python gibt das MagicMock-Objekt anstelle von return_value zurück

11

Ich habe eine Python-Datei a.py , die zwei Klassen A und B enthält.

%Vor%

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:

%Vor%

Ich erwarte, Mocked A in der Ausgabe zu erhalten. Aber was ich bekomme ist:

%Vor%

Wo mache ich falsch?

    
Mehdi Jafarnia Jahromi 05.07.2016, 08:48
quelle

1 Antwort

12

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:

%Vor%

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.

    
jonrsharpe 05.07.2016, 09:05
quelle