Beispielklasse im Pseudocode:
%Vor%Was ist eine gute Möglichkeit, das zu testen? Mit anderen Worten, wie soll ich das Verhalten beschreiben, das ich brauche?
%Vor%oder
%Vor%oder
%Vor%Test1 und Test2 erscheinen vage und es müsste eine bestimmte Berechnung getestet werden, so dass nicht wirklich beschrieben wird, was getestet wird. Dennoch ist test3 sehr begrenzt.
Was ist eine gute Möglichkeit, solche Klassen zu testen?
Ich würde die Randbedingungen (max-int, min-int, null, positiv, negativ) und einige typische Fälle testen:
%Vor%usw.
Es gibt verschiedene Philosophien. Roy Osherove, Autor von The Art of Unit Testing , scheint prefer mit expliziten Werten , und die Auswahl der niedrigsten (oder einfachste) Darstellung jeder Äquivalenzklasse .
Dieses Prinzip eignet sich nicht besonders gut für Ihr Beispiel, funktioniert aber in vielen anderen Szenarien sehr gut.
Wenn zum Beispiel eine Klasse eine Eingabe einer positiven Ganzzahl erfordert, wählen Sie die Zahl 1 , da dies die einfachste Darstellung aller positiven Argumente ist.
Persönlich bevorzuge ich eher ein Prinzip, das ich Constrained Non-Determinism nenne. Der Punkt hier ist, dass wir eine Art Fabrik uns anonyme Variablen für den gegebenen Typ dienen lassen, weil es uns zwingt, die Beziehung direkt im Test herzustellen.
Ich benutze AutoFixture , um dies zu tun (aber Sie könnten auch etwas anderes verwenden), also würde ich in diesem Fall die SumCalculator wie folgt:
%Vor% Im Prinzip bietet dieser Einzeltest eine Spezifikation für die Calculate-Methode. Wir wissen nie, was die Werte von int1
und int2
sind, und das ist sehr passend in all den vielen Fällen, wo es eigentlich keine Rolle spielt.
Wenn Sie mathematische Funktionen testen, würde ich vorschlagen, dass Sie es mit seiner inversen Funktion testen sollten, zum Beispiel: Für eine Funktion, die x = a + b, sollten Sie es testen, ob ax = -b und xb = a, das ist nur zur Veranschaulichung, natürlich wird es nicht in jedem Fall funktionieren.
Eine andere Alternative wäre die Verwendung eines parametrisierten Testfalls , um die Duplizierung zu entfernen Die Tests. Grundsätzlich enthält eine Tabelle alle Daten für die Tests in einer Tupelform ([term1, term2, sum]), dann durchläuft ein Testfall die Tabelle beim Aufruf des parametrisierten Testfalls, um eine Zeile in der Tabelle zu testen:
Ich würde auch einen negativen Test (Überlauf hier) hinzufügen: Was soll calculate(MAXINT, 1)
zurückgeben?
Siehe David Saffs Arbeit zu Theory Tests; hier (PDF) ist ein Beispiel. Dies ist im Grunde eine Möglichkeit, eine Behauptung zu machen, dass etwas (wie eine Funktion die Umkehrung seiner Funktion ist) für alle Werte in einer Menge gilt (einschließlich der Menge aller möglichen Werte) - und diese Behauptung als Test ausdrückt. Sie können einige lustige Dinge tun, indem Sie Ihren Test mit zufällig ausgewählten Werten ausführen (wenn der Satz zu umfangreich ist, um ausgiebig ausgeführt zu werden) und die Fehler automatisch als konkrete konkrete Regressionstests aufzeichnen.
Tags und Links unit-testing testing tdd bdd