Я пытаюсь запустить мои тесты с помощью unittest. Вот моя структура:Unittest failed with 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)
и UnitTest не очень нравится :
$ 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()
использование является добровольным, я не могу удалить его. Я знаю, что есть вариант называется exit
для unittest.main функции:
if __name__ == "__main__":
unittest.main(exit=False)
Но я хочу, чтобы проверить все файлы в тестов каталогов. Другой способ сделать:
if __name__ == '__main__':
tests = unittest.TestLoader().discover('.')
unittest.TextTestRunner(verbosity=1).run(tests)
Он находит все test_ файлы, но sys.exit()
делает UnitTest аварии.
Все, что вызывает 'sys.exit', не является многоразовым устройством из-за его абсолютной природы, поэтому модульное тестирование на самом деле не применимо. Однако вы можете заменить 'sys.exit' для этой части кода, хотя это также изменит поведение тестируемого. Возможно, вам удастся поймать исключение, которое он вызывает, вы должны будете поймать 'ExceptionBase', я полагаю. –