Il problema:più eccezioni e la copertura del codice quando l'unità di test pitone
Ecco un esempio artificiale del codice in prova:
from datetime import datetime
def f(s):
try:
date = s.split(":")[1]
return datetime.strptime(date, "%Y%m%d")
except (ValueError, IndexError) as e:
# some code here
raise
Ecco una serie di test momento ho:
from datetime import datetime
import unittest
from test_module import f
class MyTestCase(unittest.TestCase):
def test_valid_date(self):
self.assertEqual(f("1:20130101"), datetime(2013, 1, 1))
def test_invalid_date(self):
self.assertRaises(ValueError, f, "1:invalid")
il test passa e, se corro la copertura con la bandiera --branch
, vorrei avere la linea 100% e la copertura ramo:
$ coverage run --branch -m unittest test
..
----------------------------------------------------------------------
Ran 2 tests in 0.003s
OK
$ coverage report
Name Stmts Miss Branch BrPart Cover
--------------------------------------------
test_module.py 7 0 0 0 100%
--------------------------------------------
TOTAL 7 0 0 0 100%
Si noti tuttavia che il test attualmente in esame solo due casi - quando non c'è eccezione generata, e non v'è un'eccezione ValueError
sollevato.
La domanda:
Esiste un modo per coverage
di segnalare che non ho ancora testato un caso quando IndexError
è sollevata?
Si potrebbe avere un diverso eccetto blocco per IndexError. Penso che la copertura conti solo quali linee sono state eseguite. –