Im Allgemeinen
Wann haben Sie genug automatische Tests, um sich auf Ihre kontinuierliche Integrationspipeline verlassen zu können?
Die Antwort wird wahrscheinlich klar, wenn Sie darüber nachdenken, worüber Sie sicher sein möchten. Letztendlich bildet es 1-1 ab; Jeder Test macht Sie zuversichtlich, was er testet:
- Unit-Tests geben Ihnen die Gewissheit, dass eine Klasse (oder ein Modul) das tut, wofür sie getestet wurde.
- Integrationstests geben Ihnen die Gewissheit, dass mehrere Einheiten auf die Art und Weise zusammenarbeiten, auf die getestet wurde.
- End-to-End-Tests geben Ihnen die Gewissheit, dass die gesamte Anwendung eine bestimmte Funktion ausführt, wie sie im Test beschrieben wird.
Nach der Art und Weise, wie Sie Ihre Frage formuliert haben, denken Sie im Moment wahrscheinlich im geschäftlichen Sinne, zum Beispiel:
Ich möchte sicher sein, dass meine App X kann .
Sie schreiben also einen End-to-End-Test, der versucht, X auszuführen, und prüft, ob dies korrekt ausgeführt wird.
Konkreter
Das ist alles sehr selbstreferenziell, aber das liegt daran, dass es darauf ankommt. Mehr steckt einfach nicht dahinter.
Stellen Sie sich zum Beispiel vor, Sie schreiben eine App, um Kochrezepte zu erstellen. Ein Merkmal ist, dass Sie, wenn Sie verschiedene Mengen verschiedener Käsesorten hinzufügen, die richtige Temperatur und Zeit erhalten, damit alle schmelzen.
Sie können also einen CheeseMeltCalculator
Komponententest für Ihren Käse schreiben , bei dem Sie ihm 100 g Gouda und 200 g Emmentaler geben. Anschließend überprüfen Sie, ob Temperatur und Zeit richtig sind. Das heißt, Sie können jetzt sicher sein, dass dies CheeseMeltCalculator
für 100 g Gouda und 200 g Käse funktioniert. Wenn Sie diesen Test nun mit 300 g Gouda anstelle von 200 g wiederholen, können Sie ziemlich sicher sein, dass er für verschiedene Werte korrekt funktioniert. Sie können Tests hinzufügen , für 0
, -1
und int.MaxValue
g Gouda , zuversichtlich zu sein , dass der Code nicht auf nicht auslöst (oder richtig wie beabsichtigt stellen up) für die seltsamen Eingang.
Sie können einen Integrationstest schreiben, um zu überprüfen, ob dieser CheeseMeltCalculator
korrekt in den gesamten Prozess zur Berechnung der Lebensmitteltemperatur und -zeit integriert ist. Wenn dies schief geht, die CheeseMeltCalculator
obigen Tests jedoch in Ordnung sind, können Sie sicher sein, dass der Fehler in anderen Taschenrechnern oder in der Art und Weise vorliegt, wie die Daten von verschiedenen Taschenrechnern kombiniert werden.
Und schließlich können Sie einen End-to-End-Test zum Erstellen eines vollständigen Rezepts schreiben. Eines der Dinge, auf die Sie prüfen, ist die Ergebnistemperatur und -zeit. Wenn die vorherigen 2 Teststufen in Ordnung sind, dies jedoch schief geht, können Sie erneut sicher sein, dass diese Teile korrekt sind und der Fehler darin besteht, wie die Temperaturberechnung in die Anwendung integriert wird. Beispielsweise wird die Benutzereingabe möglicherweise nicht korrekt übertragen.
Und schließlich , wenn all diese Tests in Ordnung sind, können Sie sicher sein, dass " wenn Sie unterschiedliche Mengen verschiedener Käsesorten hinzufügen, erhalten Sie die richtige Temperatur und Zeit, damit alle schmelzen ".
Um es kurz zu machen
Der Punkt ist, dass Sie keinen Test haben können "es funktioniert richtig". Sie können nur "Wenn ich X mache, passiert Y" testen.
Dies ist jedoch genau das, was in den technischen Spezifikationen für das Projekt enthalten sein sollte. Eine Aussage wie " Wenn Sie verschiedene Mengen verschiedener Käsesorten hinzufügen, erhalten Sie die richtige Temperatur und Zeit, damit alle schmelzen " gibt dem Kunden nicht nur klare Erwartungen darüber, was das fertige Produkt tun wird, sondern kann auch gedreht werden in automatisierte Tests.
zusätzliche Information
Benutzer Richard hat diese Informationen in einer Bearbeitung hinzugefügt:
Martin Fowler hat auf seiner Website eine sehr schöne Zusammenfassung der gängigsten Strategien: https://martinfowler.com/articles/microservice-testing/
Ich möchte dies nicht entfernen, aber ich möchte Folgendes sagen: Im Vergleich zu dieser Antwort handelt es sich nicht um eine "Zusammenfassung", sondern um eine viel ausführlichere Erklärung mit schönen Grafiken und allem.
Mein Rat wäre: Wenn nach dem Lesen meiner Antwort alles für Sie Sinn macht, sind Sie fertig. Wenn die Dinge immer noch unklar erscheinen, nehmen Sie sich etwas Zeit und lesen Sie den verlinkten Artikel durch.