Das Problem:Mehrere Ausnahmen und Code-Coverage, wenn Unit-Tests Python
Hier ein künstliches Beispiel des im Test befindlichen Code ist:
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
Hier ist eine Reihe von Tests I haben derzeit:
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")
der Test besteht, und wenn ich die Abdeckung mit dem --branch
Flagge laufen, würde ich 100% -Linie erhalten und Zweigüberdeckung:
$ 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%
weist jedoch darauf hin, dass der Test derzeit nur zwei Fälle untersucht - wenn es keine Ausnahme ausgelöst, und es gibt eine ValueError
Ausnahme ausgelöst.
Die Frage:
Gibt es eine Möglichkeit für coverage
zu berichten, dass ich keinen Fall geprüft haben, wenn IndexError
erhoben wird?
Sie könnten einen anderen Ausnahmeblock für IndexError haben. Ich denke, die Berichterstattung zählt nur, welche Zeilen ausgeführt wurden. –