Ich habe eine Reihe von Klassen, die sich mit der Validierung von Werten befassen. Beispielsweise RangeValidatorprüft eine Klasse, ob ein Wert innerhalb des angegebenen Bereichs liegt.
Jede Validator-Klasse enthält zwei Methoden: eine is_valid(value), die einen bestimmten Wert zurückgibt Trueoder von diesem Falseabhängig ist und ensure_valid(value)die nach einem bestimmten Wert sucht und entweder nichts unternimmt, wenn der Wert gültig ist, oder eine bestimmte Ausnahme auslöst, wenn der Wert nicht den vordefinierten Regeln entspricht.
Mit dieser Methode sind derzeit zwei Komponententests verbunden:
Derjenige, der einen ungültigen Wert übergibt und sicherstellt, dass die Ausnahme ausgelöst wurde.
def test_outside_range(self): with self.assertRaises(demo.ValidationException): demo.RangeValidator(0, 100).ensure_valid(-5)Derjenige, der einen gültigen Wert übergibt.
def test_in_range(self): demo.RangeValidator(0, 100).ensure_valid(25)
Obwohl der zweite Test seine Aufgabe erfüllt - schlägt fehl, wenn die Ausnahme ausgelöst wird, und ist erfolgreich, wenn ensure_validnichts ausgelöst wird -, sieht die Tatsache, dass kein asserts enthalten ist, seltsam aus. Jemand, der solchen Code liest, würde sich sofort fragen, warum es einen Test gibt, der scheinbar nichts tut.
Ist dies eine aktuelle Praxis beim Testen von Methoden, die keinen Wert zurückgeben und keine Nebenwirkungen haben? Oder sollte ich den Test anders schreiben? Oder einfach einen Kommentar hinterlassen, der erklärt, was ich tue?
selfReferenz) und kein Ergebnis zurückgibt, ist dies keine reine Funktion.
voidin vielen Sprachen aufgerufen wird und alberne Regeln enthält.). Alternativ können Sie eine unendliche Zahl angeben Schleife (die auch als „Rückkehr kein Ergebnis“ funktioniert wirklich bedeutet , lieferte keine Ergebnisse.
unit -> unitdie Einheit als Standarddatentyp betrachtet, anstatt etwas magisch Besonderes. Leider gibt es nur Einheit zurück und tut nichts anderes.