practices - python unittest setupclass
Unittest verursacht sys.exit() (4)
Egal was ich tue, sys.exit () heißt unittest, selbst die trivialsten Beispiele. Ich kann nicht sagen, ob meine Installation versaut ist oder was passiert.
IDLE 1.2.2 ==== No Subprocess ====
>>> import unittest
>>>
>>> class Test(unittest.TestCase):
def testA(self):
a = 1
self.assertEqual(a,1)
>>> unittest.main()
option -n not recognized
Usage: idle.pyw [options] [test] [...]
Options:
-h, --help Show this message
-v, --verbose Verbose output
-q, --quiet Minimal output
Examples:
idle.pyw - run default set of tests
idle.pyw MyTestSuite - run suite 'MyTestSuite'
idle.pyw MyTestCase.testSomething - run MyTestCase.testSomething
idle.pyw MyTestCase - run all 'test*' test methods
in MyTestCase
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
unittest.main()
File "E:\Python25\lib\unittest.py", line 767, in __init__
self.parseArgs(argv)
File "E:\Python25\lib\unittest.py", line 796, in parseArgs
self.usageExit(msg)
File "E:\Python25\lib\unittest.py", line 773, in usageExit
sys.exit(2)
SystemExit: 2
>>>
Öffne den Quellcode zu unittest.py
. unittest.main()
ist sys.exit()
, um sys.exit()
nach dem Ausführen aller Tests sys.exit()
. Verwenden Sie TextTestRunner
, um TextTestRunner
über die Eingabeaufforderung auszuführen.
Versuchen Sie nicht, unittest.main unittest.main()
von IDLE aus auszuführen. Es versucht, auf sys.argv
, und es erhält die Argumente, mit denen IDLE gestartet wurde. Führen Sie Ihre Tests auf andere Weise als IDLE aus, oder rufen Sie unittest.main()
in seinem eigenen Python-Prozess auf.
Ihr Beispiel wird auch auf meiner Installation beendet. Ich kann es die Tests ausführen lassen und in Python bleiben, indem ich
unittest.main()
zu
unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(Test))
Weitere Informationen finden Sie hier in der Python-Bibliotheksreferenz.
Es ist schön, in der Lage zu sein, zu demonstrieren, dass Ihre Tests funktionieren, wenn Sie das Unittest-Modul zum ersten Mal ausprobieren, und um zu wissen, dass Sie Ihre Python-Shell nicht beenden werden. Diese Lösungen sind jedoch versionsabhängig.
Python 2.6
Ich benutze Python 2.6 bei der Arbeit und import
unittest2 as unittest
(das ist das unittest
Modul, das angeblich in Python 2.7 gefunden wurde).
Der unittest.main(exit=False)
funktioniert nicht in Pitton 2.6's unittest2, während JoeSkoras Lösung dies tut und wiederholt:
unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(Test))
Um dies in seine Komponenten und Standardargumente aufzugliedern, mit korrekten semantischen Namen für die verschiedenen zusammengesetzten Objekte:
import sys # sys.stderr is used in below default args
test_loader = unittest.TestLoader()
loaded_test_suite = test_loader.loadTestsFromTestCase(Test)
# Default args:
text_test_runner = unittest.TextTestRunner(stream=sys.stderr,
descriptions=True,
verbosity=1)
text_test_runner.run(loaded_test_suite)
Python 2.7 und 3
In Python 2.7 und höher sollte Folgendes funktionieren.
unittest.main(exit=False)