Ich habe eine Python 2.7-Methode, die manchmal aufruft
sys.exit(1)
Ist es möglich, einen Komponententest durchzuführen, der bestätigt, dass diese Codezeile aufgerufen wird, wenn die richtigen Bedingungen erfüllt sind?
python
unit-testing
Travis Bär
quelle
quelle
Antworten:
Ja.
sys.exit
erhöhtSystemExit
, so können Sie es überprüfen mitassertRaises
:Instanzen von
SystemExit
haben ein Attribut,code
das auf den vorgeschlagenen Beendigungsstatus festgelegt ist, und der von zurückgegebene KontextmanagerassertRaises
hat die abgefangene Ausnahmeinstanz alsexception
, sodass das Überprüfen des Beendigungsstatus einfach ist:sys.exit Dokumentation :
quelle
sys.exit(1)
(im Gegensatz zu beispielsweisesys.exit(0)
), Sie tatsächlich behaupten müssen, dasscode
es 1 ist. Ich denke, Sie könnten das mit tunassertRaisesRegexp(SystemExit, '1')
?unittest
Methode gibt, mit der Sie eine Ausnahme und ein aufrufbares Prädikat übergeben können , um die Ausnahme oder ihre Argumente auszuführen, und nicht nur ein Regex-Muster , das für die Zeichenfolgendarstellung des ersten Arguments ausgeführt werden soll… aber ich denke nicht. Gibt es ein anderes Testmodul, an das ich denke?self.assertRaisesRegex( SystemExit, '^2$', testMethod )
Weniger Code, lesbar genug.self.assertRaisesRegexp
Hier ist ein vollständiges Arbeitsbeispiel. Trotz Pavel's hervorragender Antwort habe ich eine Weile gebraucht, um das herauszufinden, also nehme ich es hier in der Hoffnung auf, dass es hilfreich sein wird.
quelle
Ich habe die Antwort auf Ihre Frage in der Python Unit Testing-Dokumentationssuche nach "Testen auf Ausnahmen" gefunden. Anhand Ihres Beispiels würde der Komponententest folgendermaßen aussehen:
Denken Sie daran, alle Argumente anzugeben, die zum Testen Ihrer Funktion erforderlich sind.
quelle
Als zusätzlichen Hinweis zu Pavel's hervorragender Antwort können Sie auch nach bestimmten Status suchen, wenn diese in der von Ihnen getesteten Funktion bereitgestellt werden. Wenn zum Beispiel
your_method()
Folgendes enthaltensys.exit("Error")
wäre, wäre es möglich, speziell auf "Fehler" zu testen:quelle