2015-04-22 3 views
11

Вот пример скрипта, который проверяет предварительное условие в самом первом тестовом примере, и я намерен прервать скрипт, если предварительное условие не выполнено.Как выйти из сценария в тестовом примере 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) 
+0

Вы ловите 'SystemExit'. –

+0

Это может помочь: http://stackoverflow.com/questions/12901338/python-unittest-cancel-all-tests-if-a-specific-test-fails – Totem

+0

Дубликат, см. Ссылку выше. –

ответ

3

Вот ответ:

Stop testsuite if a testcase find an error

Вот изменения мне нужно сделать при вызове unittest.main(). Параметр ключевого слова failfast останавливает сценарий после первого отказа.

if __name__ == "__main__": 
    unittest.main(failfast=True)