我試圖用unittest運行我的測試。這裏是我的結構:單元測試失敗,出現sys.exit
projectname/
projectname/
foo.py
bar.py
tests/
test_foo.py
test_bar.py
我運行它:
cd tests/
python -m unittest discover
但在一個文件中,例如foo.py,我用一個sys.exit(0)
,和單元測試並不真的很喜歡它:
$ python -m unittest discover
....E.
======================================================================
ERROR: test_foo (...)
----------------------------------------------------------------------
Traceback (most recent call last):
...
...
File "/home/.../projectname/foo.py", line 12, in write
sys.exit(0)
SystemExit: 0
----------------------------------------------------------------------
Ran 6 tests in 0.018s
FAILED (errors=1)
sys.exit()
使用是自願的,我不能刪除它。我知道有對unittest.main函數調用exit
一個選項:
if __name__ == "__main__":
unittest.main(exit=False)
但我想測試在測試目錄中的所有文件。另一種方法是要做到:
if __name__ == '__main__':
tests = unittest.TestLoader().discover('.')
unittest.TextTestRunner(verbosity=1).run(tests)
它發現所有TEST_文件,但sys.exit()
使得單元測試崩潰。
任何調用'sys.exit'都不是可重用的單元,因爲它的絕對性,所以單元測試並不適用。但是,您可能可以替換該代碼段的'sys.exit',儘管這也會改變被測試者的行爲。你可能能夠捕捉它引發的異常,我相信你只需要捕捉ExceptionBase。 –