Ecco uno script di esempio che verifica una condizione preliminare nel primo caso di prova e la mia intenzione è quella di interrompere lo script se la precondizione non viene soddisfatta.Come uscire dallo script nel test case non testato
#!/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()
Tuttavia, il sys.exit() esce solo dal singolo caso di test della suite. Non esce dall'intero script.
Capisco che l'unittest tratta ogni caso di test individualmente, motivo per cui eventuali eccezioni causate da qualsiasi testcase vengono gestite dal runner del test e passano al successivo caso di test.
Ma voglio che lo script si uccida da solo, come posso farlo?
Qui è l'uscita del mio script:
./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)
La mia ipotesi è che ho a pasticciare con TestRunner e uccidere lo script se un caso test restituisce qualche segnale. Ma non sono sicuro di come riuscirci davvero.
SOLUZIONE:
Ho trovato la soluzione in Stop testsuite if a testcase find an error
Qui è il cambiamento che ho bisogno di fare quando si chiama unittest.main(). flag di failfast interrompe lo script dopo il primo errore.
if __name__ == "__main__":
unittest.main(failfast=True)
Stai rilevando 'SystemExit'. –
Questo potrebbe aiutare: http://stackoverflow.com/questions/12901338/python-unittest-cancel-all-tests-if-a-specific-test-fails – Totem
Duplicato, vedi link sopra. –