Python Spott Globale variable
Ich bin mit der sys.modules['cv2'] = Mock()
zu verspotten die OpenCV-Modul, aber ich habe Probleme beim verwenden der assertEqual
um zu testen, ob eine variable gesetzt wurde korrekt mit einer globalen Variablen. Ich habe vereinfacht den code ein wenig.
Ich bin mir nicht sicher, ob mein Spott ist Recht.
Hier ist mein unit-test-Datei:
from mock import patch, Mock
sys.modules['cv2'] = Mock()
from MyClass import MyClass
del sys.modules['cv2']
....
def testFunction()
myObject = MyClass()
self.assertEqual(myObject.val, ?) # here i don't know how to test the equality
und die Datei MyClass.py
:
import module
val1 = cv2.function(1)
val2 = cv2.function(2)
class MyClass():
def _init_(self)
self.val = val1
Wenn Sie
Für mich war es sauberer zu tun, ein löschen nach Spott. Alle opencv-Funktion mock während des Imports. Vielleicht bin ich falsch
Sie sind das löschen von 2 Zeilen nach mocking - ohne den verspotteten Objekt
ok, aber selbst durch das entfernen der Zeile löschen wie kann ich testen, meine Gleichheit?
Naja, aus deinem code nicht klar ist, was versuchen Sie zu vergleichen...
sys.modules['cv2'] = Mock()
und dann del sys.modules['cv2']
den Sie löschen sys.modules['cv2']
(die verspottet object) - macht nicht viel Sinn...Für mich war es sauberer zu tun, ein löschen nach Spott. Alle opencv-Funktion mock während des Imports. Vielleicht bin ich falsch
Sie sind das löschen von 2 Zeilen nach mocking - ohne den verspotteten Objekt
ok, aber selbst durch das entfernen der Zeile löschen wie kann ich testen, meine Gleichheit?
Naja, aus deinem code nicht klar ist, was versuchen Sie zu vergleichen...
InformationsquelleAutor Romanzo Criminale | 2014-10-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht der beste Weg, das zu tun, was Sie tun möchten, ist patch
var1
. Trotzdem, weil ich bin mir nicht sicher, was Sie tun möchten, schlage ich Ihnen hier einige Lösungen:Beachten Sie, dass im ersten Fall MÜSSEN Sie den import MyClass in
patch
Kontext. Im zweiten Beispiel werden nur die Variablen auf Ihre Modul gepatcht werden.Wenn Sie schreiben müssen viele Methoden, die ein patch wie im ersten Beispiel können Sie
patch
als Dekorator-Klasse unittest-Klasse: Sie wird patchcv2
Funktion in allen tests.InformationsquelleAutor Michele d'Amico
Haben auch einen Blick auf
MagicMock
.InformationsquelleAutor