Вот пример скрипта, который проверяет предварительное условие в самом первом тестовом примере, и я намерен прервать скрипт, если предварительное условие не выполнено.Как выйти из сценария в тестовом примере 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 и убить сценарий, если тест возвращает какой-то сигнал. Но не уверен, как это сделать.
РЕШЕНИЕ:
Я нашел решение в Stop testsuite if a testcase find an error
Вот изменения мне нужно сделать при вызове unittest.main(). флаг failfast останавливает скрипт после первого отказа.
if __name__ == "__main__":
unittest.main(failfast=True)
Вы ловите 'SystemExit'. –
Это может помочь: http://stackoverflow.com/questions/12901338/python-unittest-cancel-all-tests-if-a-specific-test-fails – Totem
Дубликат, см. Ссылку выше. –