Best Practices haben immer einen Zweck, einen Grund dahinter. Es ist immer eine gute Idee, diese Gründe in Ihrem Design zu berücksichtigen - insbesondere, wenn Sie entscheiden möchten, wie und wie schwer es ist, diese Best Practices zu befolgen.
In diesem Fall besteht der Hauptgrund dafür, dass jeder Test zu einer einzigen Sache wird, darin, dass die zweite nicht getestet wird, wenn die erste fehlschlägt. Da zu viele Meinungsmacher es zu verdienen scheinen, alles auf das kleinstmögliche Maß zu brechen und jedes Stück so weit wie möglich aufzublähen, entstand die Idee, dass jeder Test eine einzige Behauptung enthalten sollte.
Folge dem nicht blind. Selbst wenn jeder Test eine Sache testen sollte, sollten Sie dennoch überlegen, wie groß oder klein jede "Sache" sein soll, und um dies zu tun, müssen Sie bedenken, warum jeder Test eine Sache testen soll - um sicherzugehen Ein Fehler in der ersten Sache lässt die zweite Sache nicht ungetestet.
Sie müssen sich also fragen: "Brauche ich diese Garantie hier wirklich?"
Angenommen, im ersten Testfall liegt ein Fehler vor - der HTTP-Antwortcode ist dies nicht 200
. Sie beginnen also, den Code zu hacken, herauszufinden, warum Sie nicht den Antwortcode erhalten haben, den Sie haben sollten, und beheben das Problem. Und was jetzt?
- Wenn Sie den Test erneut manuell ausführen, um zu überprüfen, ob Ihr Fix das Problem behoben hat, sollten Sie auf ein anderes Problem stoßen, das durch den ersten Fehler verborgen wurde.
- Wenn Sie es nicht manuell ausführen (möglicherweise, weil es zu lange dauert?) Und einfach Ihren Fix pushen und darauf warten, dass der automatisierte Testserver alles ausführt, möchten Sie möglicherweise verschiedene Asserts in verschiedene Tests einfügen. Die Zyklen sind in diesem Fall sehr lang, daher lohnt es sich, möglichst viele Fehler in jedem Zyklus zu entdecken.
Es gibt noch einige Dinge zu beachten:
Abhängigkeiten von Behauptungen
Ich weiß, dass die von Ihnen beschriebenen Tests nur ein Beispiel sind und Ihre tatsächlichen Tests wahrscheinlich komplizierter sind. Was ich also sagen werde, ist möglicherweise nicht so stark gültig wie die tatsächlichen Tests, aber es kann dennoch etwas effektiv sein, so dass Sie Vielleicht möchten Sie es in Betracht ziehen.
Wenn Sie einen REST-Service (oder ein anderes HTTP-Protokoll) haben, der Antworten im JSON-Format zurückgibt, schreiben Sie normalerweise eine einfache Client-Klasse, mit der Sie die REST-Methoden wie reguläre Methoden verwenden können, die reguläre Objekte zurückgeben. Unter der Annahme, dass der Client separate Tests hat, um sicherzustellen, dass es funktioniert, hätte ich die ersten 3 Behauptungen verworfen und nur 4 behalten!
Warum?
- Die erste Zusicherung ist redundant - die Clientklasse sollte eine Ausnahme auslösen, wenn der HTTP-Antwortcode nicht 200 ist.
- Die zweite Zusicherung ist redundant. Wenn die Antwort leer ist, ist das Ergebnisobjekt null oder eine andere Darstellung eines leeren Objekts, und Sie müssen nirgendwo den Schlüssel X eingeben.
- Die dritte Zusicherung ist redundant. Wenn der JSON ungültig ist, wird beim Versuch, ihn zu analysieren, eine Ausnahme angezeigt.
Sie müssen also nicht alle diese Tests ausführen - führen Sie einfach den vierten Test aus. Wenn einer der Fehler auftritt, die die ersten drei zu erkennen versuchen, schlägt der Test mit einer geeigneten Ausnahme fehl, bevor Sie überhaupt die tatsächliche Bestätigung erhalten.
Wie möchten Sie die Berichte erhalten?
Angenommen, Sie erhalten keine E-Mails von einem Testserver, sondern die QS-Abteilung führt die Tests aus und benachrichtigt Sie über fehlgeschlagene Tests.
Jack von QA klopft an deine Tür. Er sagt, dass die erste Testmethode fehlgeschlagen ist und die REST-Methode einen schlechten Antwortcode zurückgegeben hat. Sie danken ihm und suchen nach der Grundursache.
Dann kommt Jen von der Qualitätssicherung und sagt, dass die dritte Testmethode fehlgeschlagen ist - die REST-Methode hat keinen gültigen JSON im Antworttext zurückgegeben. Sie sagen ihr, dass Sie sich diese Methode bereits ansehen, und Sie glauben, dass dasselbe, was dazu geführt hat, dass ein fehlerhafter Exit-Code zurückgegeben wurde, auch dazu geführt hat, dass etwas zurückgegeben wurde, das kein gültiger JSON ist und eher wie ein Exception-Stack-Trace aussieht.
Sie können wieder arbeiten, aber dann kommt Jim von der Qualitätssicherung und sagt, dass die vierte Testmethode fehlgeschlagen ist und die Antwort keinen X-Schlüssel enthält ...
Sie können nicht einmal nach dem Grund suchen, da es schwierig ist, Code anzuzeigen, wenn Sie keinen Computerbildschirm haben. Wenn Jim schnell genug wäre, hätte er rechtzeitig ausweichen können ...
E - Mails von dem Testserver sind leichter zu entlassen, aber immer noch - würden Sie nicht lieber nur mitteilen, ONCE , dass etwas mit dem Testverfahren, und Blick auf den relevanten Testprotokollen selbst falsch ist?