Ich habe ein großes Projekt, das mit dem Python-Unit-Test-Modul getestet wurde.
Ich habe eine kleine Methode, die große Aspekte des Systemverhaltens steuert. Ich brauche diese Methode, um ein festes Ergebnis zurückzugeben, wenn ich unter den UTs laufe, um konsistente Testläufe zu geben, aber es wäre teuer für mich, dies für jeden einzelnen UT zu simulieren.
Gibt es eine Möglichkeit, dass ich diese einzelne Methode, Unittest, bewusst machen kann, so dass sie ihr Verhalten ändern kann, wenn sie unter dem Unittest läuft?
Ich weiß nicht viel über das Modul unittest
, aber wenn Sie die Datei direkt für den Komponententest ausführen, können Sie den Testcode mit folgendem if einschließen:
Jeder Code, der in dieser if-Anweisung enthalten ist, wird nur ausgeführt, wenn Ihr bestimmtes Modul direkt aufgerufen und nicht in etwas anderes importiert wird. Laut den Dokumenten sollten Sie so zuerst unittest.main()
aufrufen.
Dies setzt voraus, dass Sie nicht über die Befehlszeile ausgeführt werden.
BEARBEITEN: Sie könnten den Funktionsstapel betrachten, um zu versuchen, die Funktion unittest.main()
zu finden.
Es ist eine Art Hacky-Lösung, aber das Modul inspect
hat viele nützliche Funktionen für die Introspektion.
Sie können eine Funktion zur Laufzeit nur für die Tests ändern. Zum Beispiel:
Wenn nun Code in module
func()
aufruft, wird er tatsächlich an deine replacement_func()
zurückgerufen.
Ich bin sicher, dass es andere, bessere Methoden gibt, aber Sie könnten immer ein globales Flag von Ihrem Haupttest und nicht unter dem Unit-Test setzen und dann in Ihrer Methode darauf zugreifen.
Der andere Weg wäre natürlich, die Methode als Teil des Unit-Test-Setups zu überschreiben - wenn Ihre Methode brian
heißt und Sie eine test_brian
haben, dann einfach während Ihrer Pre-Test-Einstellung brian = test_brian
erledigt den Job, Sie müssen möglicherweise Modulnamen in die vorhergehende Anweisung einfügen .
Tags und Links python unit-testing