Wie zu stoppen alle tests aus in einem test-oder setUp mit unittest?
Ich bin die Erweiterung der python 2.7 unittest
Rahmen, um einige Funktion zu testen. Eines der Dinge, die ich tun möchte, ist zu stoppen, alle tests, die innerhalb eines Tests, und innerhalb von ein setUpClass()
Methode. Manchmal, wenn ein test fehlschlägt, wird das Programm so gebrochen ist es nicht mehr zu testen, zu halten, so möchte ich halt die tests ausgeführt werden.
Bemerkte ich, dass ein Testurteil hat eine shouldStop
- Attribut und einem stop()
Methode, aber ich bin mir nicht sicher, wie Sie Sie bekommen Zugang zu inneren ein test.
Hat jemand irgendwelche Ideen? Gibt es einen besseren Weg?
- Ich benutze diese zum Abbruch der Prüfung führen Sie vor dem ausführen eines tests, wenn die zu testende Anwendung so konfiguriert ist, mit prod-Einstellungen. (eigentlich bei allen nicht-test-Einstellungen.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Falls Sie interessiert sind, hier ist ein einfaches Beispiel, wie Sie konnten eine Entscheidung treffen, sich selbst zu beenden, eine test-suite, sauber mit py.test:
und wenn Sie dies ausführen, erhalten Sie:
Können Sie auch die
py.test.exit()
Aufruf innerhalb einer Prüfung oder in einem bestimmten plugin.Sidenote:
py.test
nativ unterstütztpy.test --maxfail=NUM
zu implementieren beenden nach NUM Ausfälle.Sidenote2:
py.test
hat nur eingeschränkte Unterstützung für die Durchführung von tests in der traditionellenunittest.TestCase
Stil.Hier ist eine weitere Antwort, die ich kam mit, nach einer Weile:
Erste, ich Hinzugefügt eine neue Ausnahme:
dann habe ich eine neue
assert
meinem Kind test Klasse:und Letzte, die ich überschrieb die
run
- Funktion auf dieser rechts unter dertestMethod()
nennen:Ich mag dieses besser, da der test hat jetzt die Fähigkeit, zu stoppen, alle tests, und es gibt keine cpython-spezifischen code.
Aktuell, Sie kann nur aufhören den tests in der suite-Ebene. Sobald Sie in eine
TestCase
, diestop()
Methode für dieTestResult
wird nicht verwendet, wenn das Durchlaufen der tests.Etwas in Bezug auf Ihre Frage, wenn Sie mit python 2.7, können Sie die
-f/--failfast
Flagge, beim aufrufen der test mitpython -m unittest
. Damit stoppen Sie den test beim ersten Ausfall.Sehen 25.3.2.1. failfast -, Fang-und Puffer-Kommandozeilen-Optionen
Können Sie auch erwägen, Nase die tests auszuführen, und verwenden Sie die
-x, --stop
Flagge zu stoppen Sie den test zu früh.In der test-Schleife
unittest.TestSuite
gibt es einebreak
Zustand an den start:So, ich bin mit einen benutzerdefinierten test-suite wie diese:
mit einen benutzerdefinierten test-Ergebnis-Klasse wie folgt aus:
und mein test Klassen werden wie:
Unter bestimmten Bedingungen, die ich dann Abbrechen, der test-suite; z.B. die test-suite beginnt mit einem login, und wenn das fehlschlägt, habe ich nicht zu versuchen den rest:
Dann benutze ich die test-suite in der folgenden Weise:
Ich bin mir nicht sicher, ob es einen besseren Weg, es zu tun, aber es verhält sich korrekt bei meinen tests.
Ich schaute auf die
TestCase
Klasse und entschieden Unterklasse es. Die Klasse nur überschreibtrun()
. Kopiert habe ich die Methode und, beginnend bei Zeile 318 in der ursprünglichen Klasse Hinzugefügt diese:Es hat einige CPython-spezifischen code, in der es zu sagen, wenn der test-Methode kann akzeptieren andere parameter, aber da bin ich mit CPython überall, das ist nicht ein Problem für mich.
Aber Sie wird nicht die übliche test-Berichte von den tests, die bisher einen sehr einfachen Weg, beenden Sie den Testlauf aus, in einer
TestCase
Methode ist einfach zu erhöhenKeyboardInterrupt
innerhalb der Methode.Können Sie sehen, wie nur
KeyboardInterrupt
darf, Blase bis inunittest
's test-runner-suchen Sie in CPython code hier innentestPartExecutor()
.Verwenden: