Как выйти из script в тестовом примере unittest
Вот пример сценария, который проверяет предварительное условие в самом первом тестовом примере, и я намерен прервать сценарий, если предварительное условие не выполнено.
#!/usr/bin/python
import unittest
import sys
class TestMyScript(unittest.TestCase):
def test_000_prerequisite(self):
a = 0
if not a:
sys.exit()
return
def test_001_test1(self):
print "Inside test 1"
return
def test_002_test2(self):
print "Inside test 2"
return
if __name__ == "__main__":
unittest.main()
Однако sys.exit() выходит только из отдельного тестового набора. Это не завершает весь сценарий.
Я понимаю, что unittest обрабатывает каждый тестовый пример индивидуально, поэтому все исключения, вызванные любым тестовым сценарием, обрабатываются исполнителем теста и переходят к следующему тестовому сценарию.
Но я хочу, чтобы скрипт убил сам себя, как мне это сделать?
Вот вывод моего скрипта:
./temp.py
EInside test 1
.Inside test 2
.
======================================================================
ERROR: test_000_prerequisite (__main__.TestMyScript)
----------------------------------------------------------------------
Traceback (most recent call last):
File "./temp.py", line 9, in test_000_prerequisite
sys.exit()
SystemExit
----------------------------------------------------------------------
Ran 3 tests in 0.000s
FAILED (errors=1)
Я предполагаю, что мне нужно возиться с TestRunner и убивать скрипт, если тестовый случай возвращает какой-то сигнал. Но не уверен, как на самом деле этого добиться.
Ответы
Ответ 1
Вот ответ:
Остановите тестовый набор, если тестовый набор обнаружил ошибку
Вот изменение, которое мне нужно сделать при вызове unittest.main()
. failfast
ключевого слова failfast
останавливает сценарий после первого сбоя.
if __name__ == "__main__":
unittest.main(failfast=True)
ps failfast
аргумент ключевого слова доступен только для python 2. 7+
pps вы также можете использовать failfast
на unittest.TextTestRunner()