Ich bin mehrmals auf dieses Dilemma gestoßen. Sollte meine Unit-Tests die Funktionalität der Methode duplizieren, die sie testen, um ihre Integrität zu überprüfen? ODER Sollten Komponententests versuchen, die Methode mit zahlreichen manuell erstellten Instanzen von Eingängen und erwarteten Ausgaben zu testen?Sollte ein Unit-Test die Funktionalität replizieren oder Test ausgeben?
Ich stelle vor allem die Frage für Situationen, in denen die Methode, die Sie testen, einigermaßen einfach ist und seine ordnungsgemäße Funktionsweise kann durch einen Blick auf den Code für eine Minute überprüft werden.
Vereinfachtes Beispiel (in Ruby):
def concat_strings(str1, str2)
return str1 + " AND " + str2
end
Vereinfachte Funktionalität replizierenden Test für das obige Verfahren:
def test_concat_strings
10.times do
str1 = random_string_generator
str2 = random_string_generator
assert_equal (str1 + " AND " + str2), concat_strings(str1, str2)
end
end
Ich verstehe, dass die meiste Zeit die Methode, die Sie Tests sind nicht einfach sein genug, um es auf diese Weise zu rechtfertigen. Aber meine Frage bleibt; ist dies unter bestimmten Umständen eine gültige Methode (warum oder warum nicht)?
Ich bin nicht vertraut mit dem ersten Szenario - wo ein Unit-Test die Funktionalität einer Methode dupliziert, können Sie ein wenig erarbeiten? – RobS
In Test Driven Development erstelle ich oft einen Test, um zu überprüfen, ob eine (noch zu schreibende) Methode wie erwartet funktioniert. In einfachen Szenarien bin ich oft versucht, diese Spezifikationen programmatisch so zu schreiben, wie ich es am besten kann, um aus den Eingabewerten die gewünschte Ausgabe zu erzielen. Manchmal habe ich das Gefühl, dass es wahrscheinlicher ist, dass ich einen Fehler bei der manuellen Berechnung und Eingabe der erwarteten Ergebnisse begehen würde, als nur ein wenig Code zu schreiben, um den Job zu erledigen. –
große Frage - Ich denke, das ist eine Ausnahme zu der Regel von OnceAndOnlyOnce .. es sei denn, ich weiß nicht, wie dies richtig zu refactor. – Gishu