Meine Interpretation dieses Vortrags lautet:
- Testkomponenten, keine Klassen.
- Testen Sie Komponenten über ihre Schnittstellenports.
Es wird im Vortrag nicht angegeben, aber ich denke, der angenommene Kontext für den Rat ist ungefähr so:
- Sie entwickeln ein System für Benutzer, nicht beispielsweise eine Dienstprogrammbibliothek oder ein Framework.
- Das Ziel des Testens ist es , so viel wie möglich innerhalb eines wettbewerbsfähigen Budgets erfolgreich zu liefern.
- Komponenten werden in einer einzigen, ausgereiften, wahrscheinlich statisch typisierten Sprache wie C # / Java geschrieben.
- eine Komponente liegt in der Größenordnung von 10000-50000 Zeilen; ein Maven- oder VS-Projekt, ein OSGI-Plugin usw.
- Komponenten werden von einem einzelnen Entwickler oder einem eng integrierten Team geschrieben.
- Sie folgen der Terminologie und Herangehensweise von etwas wie der hexagonalen Architektur
- An einem Komponentenport verlassen Sie die lokale Sprache und das Typsystem und wechseln zu http / SQL / XML / bytes / ...
- Um jeden Port werden typisierte Schnittstellen im Java / C # -Sinne eingeschlossen, bei denen Implementierungen auf Switch-Technologien umgeschaltet werden können.
Das Testen einer Komponente ist daher der größtmögliche Umfang, in dem etwas noch vernünftigerweise als Komponententest bezeichnet werden kann. Dies unterscheidet sich stark davon, wie manche Menschen, insbesondere Akademiker, den Begriff verwenden. Es ist nichts anderes als die Beispiele im typischen Tutorial für Unit-Test-Tools. Es entspricht jedoch seinem Ursprung beim Testen von Hardware. Platinen und Module sind einheitlich getestet, keine Drähte und Schrauben. Oder zumindest bauen Sie keine Schein-Boeing, um eine Schraube zu testen ...
Daraus zu extrapolieren und einige meiner eigenen Gedanken einzubringen,
- Jede Schnittstelle wird entweder eine Eingabe, eine Ausgabe oder ein Mitarbeiter (wie eine Datenbank) sein.
- Sie testen die Eingabeschnittstellen. Rufen Sie die Methoden auf und bestätigen Sie die Rückgabewerte.
- Sie verspotten die Ausgabeschnittstellen; Überprüfen Sie, ob die erwarteten Methoden für einen bestimmten Testfall aufgerufen werden.
- Sie fälschen die Mitarbeiter; bieten eine einfache, aber funktionierende Implementierung
Wenn Sie das richtig und sauber machen, brauchen Sie kaum ein Spottwerkzeug. Es wird nur einige Male pro System verwendet.
Eine Datenbank ist im Allgemeinen ein Kollaborateur, daher wird sie eher gefälscht als verspottet. Es wäre schmerzhaft, dies von Hand umzusetzen. Zum Glück gibt es solche Dinge bereits .
Das grundlegende Testmuster besteht darin, eine Abfolge von Vorgängen auszuführen (z. B. Speichern und erneutes Laden eines Dokuments). Bestätigen Sie, dass es funktioniert. Dies ist das gleiche wie für jedes andere Testszenario. Keine (funktionierende) Implementierungsänderung führt wahrscheinlich dazu, dass ein solcher Test fehlschlägt.
Die Ausnahme besteht darin, dass Datenbankeinträge vom zu testenden System geschrieben, aber nie gelesen werden. zB Überwachungsprotokolle oder ähnliches. Dies sind Ausgänge und sollten daher verspottet werden. Das Testmuster besteht aus einer Abfolge von Operationen. Bestätigen Sie, dass die Überwachungsschnittstelle mit den angegebenen Methoden und Argumenten aufgerufen wurde.
Beachten Sie, dass selbst hier, sofern Sie ein typsicheres Verspottungswerkzeug wie mockito verwenden , das Umbenennen einer Schnittstellenmethode keinen Testfehler verursachen kann. Wenn Sie eine IDE mit geladenen Tests verwenden, wird diese zusammen mit der Umbenennung der Methode überarbeitet. Wenn Sie dies nicht tun, wird der Test nicht kompiliert.