Ich habe eine Funktion, die eine Modellklasse überprüft, in der jedes Mitglied der Klasse im Falle eines Strings nicht null oder nicht leer sein muss. so etwas wie diesesWie testet man eine Funktion mit N verschiedenen Pfaden?
Die Logik für diese is_complete
Funktion ist:
def is_complete(profile):
if profile.first_name in (None, ''):
return False
elif profile.last_name in (None, ''):
return False
elif profile.dob is None:
return False
.
.
.# and checks so on for all members of the profile instance
.
.
return True
Meine Frage, da die Anzahl der möglichen Pfade der Ausführung recht groß nehmen ist und erhöht sich proportional zu der Anzahl der Elementvariablen von profile
zu geprüft werden, wie schreibt man zuverlässig Tests für alle möglichen Pfade?
Gerade jetzt, ich habe zwei einfache Testfälle:
- wo nur einige der Mitglieder festgelegt und überprüft
assertFalse(is_complete(foo))
- wo alle die Mitglieder festgelegt und überprüft
assertTrue(is_complete(foo))
Aber ich habe das Gefühl, dass dies nicht genug sein kann.
Beim Komponententest müssen Sie nicht unbedingt jeden Pfad testen. Mit vielen Funktionen ist das nicht einmal möglich oder praktisch. Sie wollen einfach genug testen. Wenn eine Funktion komplex ist, ist dies wahrscheinlich ein Zeichen dafür, dass sie in kleinere Funktionen unterteilt werden sollte. – ThomasW
Sie sollten Ihr Klassendesign ernsthaft überdenken. Im Idealfall sollte es nicht möglich sein, teilweise initialisierte Objekte zu erstellen. Konstrukteure sollten sich darum kümmern. Wenn einige der Daten, die Sie für die Initialisierung Ihrer Klasse benötigen, zum Zeitpunkt der Erstellung nicht verfügbar sind, versuchen Sie, sie in eine andere Klasse zu extrahieren. –
@FrankPuffer Eine Instanz mit ihren Mitgliedern als leere Strings oder Nullen wird nicht als _partial initialized_ betrachtet, da sie einen gültigen Zustand darstellt, in dem die Instanz sein kann. Es könnte ein Formular darstellen, dessen Felder der Benutzer gerne leer gelassen hat. –