6 Test-Driven Development
In diesem Kapitel zeigen wir am Beispiel eines Verwaltungssystems für Flüge, wie man eine testgesteuerte Applikation entwickelt.
In diesem Kapitel zeigen wir Ihnen, wie man eine Applikation mit der testgesteuerten (Test-Driven Development) Technik entwickeln kann. Hierbei wird nicht erst nach der Programmierung der Code getestet, sondern umgekehrt. Diese Programmiertechnik wird von immer mehr Entwicklern eingesetzt.
6.1 Was ist TDD? 

Eine Rails-Applikation besteht aus mehreren Teilen, die miteinander interagieren. Die Models, Controller und Views sind gemeinsam durch ihre Interaktion für die Darstellung der Inhalte verantwortlich. Wenn an einer Stelle, zum Beispiel im Model, etwas geändert wird, kann das Konsequenzen an anderen Stellen haben. Wird zum Beispiel ein Datenbankfeld umbenannt, muss in letzter Konsequenz auch der View entsprechend angepasst werden.
Das heißt, mit steigender Komplexität wird es immer schwieriger, die Ursachen für mögliche Fehler zu finden.
Und genau an diesem Punkt setzt Test-Driven Development (TDD) an. Es wird eine Annahme getroffen und entsprechender Testcode programmiert, der dann überprüft, ob der Code der Applikation auch der Annahme entspricht. Wir legen also im Testcode fest, was wir von dem Teil der Applikation, den wir gerade testen, erwarten.
Wenn zum Beispiel ein Preis ermittelt werden soll, erwarten wir unter bestimmten Bedingungen einen bestimmten Wert. Ob der ermittelte Wert dem erwarteten Wert entspricht, überprüfen wir mit dem Testcode.
Das Interessante dabei ist, dass der Testcode nicht am Ende eines Projektes entwickelt wird, sondern bevor man eine Zeile Code der eigentlichen Applikation entwickelt hat. Das heißt, wir beginnen mit dem Testcode, der uns dann vorgibt, was wir für unsere Applikation zu programmieren haben. Praktisch heißt das, wir treffen eine Annahme, programmieren den entsprechenden Testcode und führen diesen aus. Schlägt er fehl, korrigieren und/oder erweitern wir unseren Code der Applikation, bis der Testcode funktioniert.
Abbildung TDD Prinzip
Wichtig bei dem TDD-Prinzip ist es, dass man nicht erst alle Test entwickelt und dann mit dem eigentlichen Programmieren loslegt, sondern wie folgt:
- Erstellung des Testcodes für die nächste Funktionalität
- Test ausführen
- Implementierung oder Verbessern der Funktionalität, bis Test erfolgreich ist
Rails unterscheidet zwischen drei Arten von Tests:
- Unit-Test:
Hiemit werden hauptsächlich Models getestet.
- Functional-Tests:
Setzt den Fokus auf das Testen von Controllern und Views.
- Integration-Tests:
Dient zum Testen der Gesamtfunktionalität der Rails-Applikation.
Für jeden Test-Typ gibt es ein eigenes Verzeichnis im Projekt.
Abbildung Verzeichnis test
Das Verzeichnis »fixtures« ist für Testdaten bestimmt. Im Verzeichnis »mocks« werden sogenannte Mock-Objekte (Attrappen-Objekte) abgelegt. Mock-Objekte sind Objekte, die nur die Funktion eines echten Objekts imitieren, aber nicht die Original-Funktionalität bieten. Dies ist z. B. sinnvoll, wenn ein Objekt Online-Zugriffe macht, die für die Tests zu aufwendig wären.
TDD ist in Rails integriert, und es wird empfohlen, mit dieser Technik zu entwickeln. Um TDD besser zu verstehen, werden wir die Thematik anhand eines Projekts exemplarisch erklären.
Alternative mit RSpec |
RSpec ist eine neue Alternative zu dem eingebauten TDD in Rails und erfreut sich immer größerer Beliebtheit unter den Entwicklern. RSpec basiert auf dem sogenannten Behaviour-Driven Development (siehe http://rspec.info). |
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.