5 Stimmen

Integrationstests - kann man sie richtig machen?

Ich habe TDD als Entwicklungsstil in den letzten zwei Jahren bei einigen Projekten eingesetzt, aber ich bleibe immer an demselben Punkt hängen: Wie kann ich die Integration der verschiedenen Teile meines Programms testen?

Derzeit schreibe ich einen Testfall pro Klasse (dies ist meine Faustregel: eine "Einheit" ist eine Klasse, und jede Klasse hat einen oder mehrere Testfälle). Ich versuche, Abhängigkeiten mit Hilfe von Mocks und Stubs aufzulösen, und das funktioniert wirklich gut, da jede Klasse unabhängig getestet werden kann. Nach einiger Codierung sind alle wichtigen Klassen getestet. Dann "verdrahte" ich sie mit einem IoC-Container. Und hier stecke ich fest: Wie kann ich testen, ob die Verdrahtung erfolgreich war und die Objekte so interagieren, wie ich es möchte?

Ein Beispiel: Denken Sie an eine Webanwendung. Es gibt eine Controllerklasse, die ein Array von IDs nimmt, ein Repository verwendet, um die Datensätze auf der Grundlage dieser IDs zu holen, dann über die Datensätze iteriert und sie als String in eine Outfile schreibt.

Der Einfachheit halber würde es drei Klassen geben: Controller , Repository , OutfileWriter . Jede von ihnen wird isoliert getestet.

Was ich tun würde, um die "echte" Anwendung zu testen: die http-Anfrage (entweder manuell oder automatisiert) mit einigen IDs aus der Datenbank und dann in das Dateisystem schauen, wenn die Datei geschrieben wurde. Natürlich könnte dieser Prozess automatisiert werden, aber trotzdem: dupliziert das nicht die Testlogik? Ist das, was man einen "Integrationstest" nennt? In einem Buch, das ich kürzlich über Unit-Tests gelesen habe, schien es mir, dass Integrationstests eher ein Anti-Muster sind?

0voto

Sean B Punkte 333

Driving Ihre TDD mit BDD würde die meisten dieser für Sie zu decken. Sie können Cucumber / SpecFlow, mit WatiR / WatiN verwenden. Für jede Funktion gibt es ein oder mehrere Szenarien, und Sie arbeiten jeweils an einem Szenario (Verhalten), und wenn es erfolgreich ist, gehen Sie zum nächsten Szenario über, bis die Funktion vollständig ist.

Um ein Szenario zu vervollständigen, müssen Sie TDD verwenden, um den Code zu erstellen, der notwendig ist, um jeden Schritt im aktuellen Szenario auszuführen. Die Szenarien sind unabhängig von Ihrer Backend-Implementierung, aber sie überprüfen, ob Ihre Implementierung funktioniert. Wenn etwas in der Web-App für diese Funktion nicht funktioniert, muss das Verhalten in einem Szenario enthalten sein.

Sie können natürlich auch Integrationstests durchführen, wie andere bereits erwähnt haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X