Es ist einfacher, als Sie denken. Sie verwenden einfach TDD für jede einzelne Klasse. Jede öffentliche Methode, die Sie in der Klasse haben, sollte auf alle möglichen Ergebnisse getestet werden. Die "Proof of Concept" TDD-Beispiele, die Sie sehen, können also auch in einer relativ großen Anwendung verwendet werden, die viele Hunderte von Klassen hat.
Eine weitere TDD-Strategie, die Sie verwenden können, ist die Simulation von Anwendungstestläufen selbst, indem Sie das Hauptverhalten der Anwendung kapseln. Ich habe zum Beispiel ein Framework geschrieben (in C++, aber das sollte für jede OO-Sprache gelten), das eine Anwendung darstellt. Es gibt abstrakte Klassen für die Initialisierung, die Hauptlaufschleife und das Beenden der Anwendung. Meine main()-Methode sieht also etwa so aus:
int main(int argc, char *argv[]) {
int result = 0;
myApp &mw = getApp(); // Singleton method to return main app instance
if(mw.initialize(argc, argv) == kErrorNone) {
result = mw.run();
}
mw.shutdown();
return(result);
}
Dies hat einen doppelten Vorteil. Erstens kann die gesamte Funktionalität der Hauptanwendung in eine statische Bibliothek kompiliert werden, die dann sowohl mit der Testsuite als auch mit dieser main.cpp Stub-Datei gelinkt wird. Zweitens bedeutet es, dass ich ganze "Durchläufe" der Hauptanwendung simulieren kann, indem ich Arrays für argc & argv[] erstelle und dann simuliere, was in main() passieren würde. Wir verwenden diesen Prozess, um viele Funktionen aus der realen Welt zu testen, um sicherzustellen, dass die Anwendung genau das erzeugt, was sie angesichts eines bestimmten Korpus von Eingabedaten und Befehlszeilenargumenten aus der realen Welt tun soll.
Jetzt fragen Sie sich wahrscheinlich, wie sich dies bei einer Anwendung mit einer echten grafischen Benutzeroberfläche, einer webbasierten Schnittstelle oder was auch immer ändern würde. Dazu würde ich einfach sagen, dass man diese Aspekte des Programms mit Hilfe von Mock-ups testen sollte.
Aber kurz gesagt, mein Ratschlag lautet: Brechen Sie Ihre Testfälle auf die kleinste Ebene herunter und beginnen Sie dann, nach oben zu schauen. Schließlich wird die Testsuite sie alle zusammenwerfen, und Sie werden am Ende ein vernünftiges Maß an automatisierter Testabdeckung haben.