Im
letzten Text über Behauptungen fehlte etwas Wichtiges und war nicht einverstanden.
Was ist der Unterschied zwischen gegeben und wann und wie hängt dies mit Behauptungen zusammen?
Die Idee dahinter ist einfach - wir wollen die Anzahl der Behauptungen begrenzen.
Betrachten Sie ein kleines Beispiel.
Übergeben wir ein gültiges Objekt an die Methode, rufen den zusätzlichen Service auf und erweitern seine Eigenschaften.
Ich muss vor dem Test keinen Code schreiben, daher gehen wir davon aus, dass dies nur dazu dient, das Gesamtbild zu vermitteln.
public User enrichUser(User validUser){ user.setDetails(enrichmentService.getUserDetails(validUser.getId())); return user; }
Wir sind nicht an gültigen Benutzervariationen interessiert. Es ist nicht null, es hat immer eine ID, dann ist es gültig. Dies ist Voraussetzung, d.h. gegeben.
In der Tat müssen wir zwei Bedingungen berücksichtigen - AnreicherungService scheitern und Erfolg. Dies ist eine Bedingung, d.h. wann.
Wie unterscheidet man sich?
Gegeben erfordert keine Überprüfung anderer Fälle, wenn - erfordert. Das heißt whenValidUser erfordert whenInvalidUser und givenValidUser nicht.
Und Bereicherungsservice == null? Wenn wir eine Abhängigkeit injiziert haben, können wir diesen Teil der Konfiguration berücksichtigen und bei den Tests nicht darüber nachdenken. Absolut. Es gibt Voraussetzungen, dass es keinen Sinn macht, sie aufzulisten.
Wenn die Methode nur Benutzer akzeptiert, erhöht sich die Anzahl der überprüften Skripte. Gegeben wird wann.
Noch eine Frage - aber genau genommen kann eine Methode aus Versehen oder absichtlich einen Benutzer für uns ruinieren? Sollten wir es nicht überprüfen?
Wenn wir antworten - ja, müssen wir zugeben, dass dies eine große Belastung sein kann. Ein Benutzer kann über fünfzig Eigenschaften verfügen, und deren Überprüfung bei jeder Methode kann teuer sein. Es gibt Massenprüfungen unter Verwendung von Bibliotheken, aber dadurch verlieren wir die wichtige Funktion des Tests - die gewünschte Funktionalität vorzuschreiben und nicht den Schmutz hinter der Implementierungskurve aufzunehmen.
Dies kann mit der Flughafensicherheit verglichen werden - jemand überprüft das Ticket, das Gepäck, die Taschen und die Schecks werden nicht bei jedem Schritt dupliziert. Das heißt Assets vertrauen darauf, was die Implementierung bewirkt, und überprüfen nur, was sie vorschreiben.
Eine richtig konstruierte Vorbedingung reduziert somit die Anzahl der Skripte und Behauptungen. Wir machen Aussagen nur unter der Bedingung.
Leider machen Frameworks wie Cucumber keinen großen Unterschied, da die Voraussetzungen selbst nicht prüfen, ob Given, That When derselbe, rein beschreibende Begriff ist.
In komplexeren Fällen ist es schwierig, eine von der anderen zu unterscheiden, die an sich riecht. Beispielsweise überprüfen viele Tests hintereinander dasselbe, oder einige der Bedingungen in den Tests werden vergessen oder als unangemessen ignoriert.
Dies ist ein guter Grund, die Spezifikationen umzustrukturieren und neu zu gestalten.