Betrachten wir diese Funktion unter Test im module.py
gelegen haben:Code Coverage und Ternary Operatoren
def f(a, b):
return (a - b) if a > b else 1/0
Und wir folgende Testfall im test_module.py
haben:
from unittest import TestCase
from module import f
class ModuleTestCase(TestCase):
def test_a_greater_than_b(self):
self.assertEqual(f(10, 5), 5)
Wenn wir Tests durchführen mit pytest
mit der aktivierten "Zweigabdeckung" mit der HTML-Ausgabe Berichterstattung:
pytest test_module.py --cov=. --cov-branch --cov-report html
Der Bericht wird zu 100% Zweigüberdeckung Anspruch mit allen „teilweise“ Zweig bedeckt:
Aber wir haben den else 1/0
Teil überhaupt klar nicht abgedeckt.
Gibt es eine Möglichkeit, die Berichterstattung zu verbessern, um die nicht abgedeckten Teile der ternären Betreiber zu sehen?
Im Gegensatz zur Schlüsselwortversion ist die Operatorversion von 'if' /' else' keine Kontrollstruktur, sondern eine boolesche Operation. Die tatsächliche Kontrollstruktur ist in der Implementierung der Operation verborgen, außerhalb des Sichtbereichs der Abdeckung. Ich stimme zu, dass es eine gute Idee wäre, dies in das "Coverage" -Paket umzusetzen. –