A power workshop during JAX 2007 on advanced techniques of test-driven development. It deals with acceptance tests using FIT as well as with mock objects, GUI testing and Groovy as a testing language for Java.
Agenda
• Testgetriebene Entwicklung im Überblick
• Akzeptanztests mit FIT
• Unit Tests mit JUnit/Mockobjekte mit EasyMock
• Legacy Code und Code Coverage
• Testen von GUIs und Web-Applikationen
• Testen mit Skriptsprachen
• Diskussion
Motivation
• Software hat Geschäftswert durch zwei Qualitäten
• Funktionale Qualität
(Funktionalität, Fehlerfreiheit)
• Strukturelle Qualität
(Design/Codestruktur für Weiterentwicklung)
• Hinzufügen neuer Funktionalität
gefährdet funktionale und strukturelle Qualität
• Verbesserung der strukturellen Qualität
gefährdet die funktionale Qualität
Testgetriebene Entwicklung
• Testgetriebene Programmierung:
Motiviere jede Verhaltensänderung am Code
durch einen automatisierten Test
(ständige Absicherung der funktionalen Qualität)
• Refactoring:
Vereinfache das Code-Design soweit wie möglich
(funktionale Qualität ist durch Tests abgesichert)
• (Häufige Integration:
Integriere den Code so häufig wie nötig)
Entwickler schreiben Unit Tests
• testen Komponenten des Systems in Isolation
• geben uns konkretes Feedback
• ermöglichen sichere Änderungen
• sichern Erhalt der vorhandenen Funktionalität
• müssen bei jeder Integration zu 100% laufen
• können funktionale Tests auf Systemebene
nicht ersetzen!
Kunden spezifizieren Akzeptanztests
• testen das System überwiegend als Ganzes
• geben unseren Kunden Vertrauen
in die gelieferte Software
• klären die Anforderungen
frühzeitig an konkreten Beispielen
• machen den Projektfortschritt sichtbar
• müssen vom Kunden erstellt und gepflegt
werden können
• Unsere Aufgabe ist es, den entsprechenden
Rahmen für ihre Automatisierung zu schaen!
Akzeptanztests mit FIT
• FIT: Framework for Integrated Test
• Zum Schreiben und Ausführen automatischer
Akzeptanztests
• Testdaten werden tabellarisch erstellt
(in HTML, mit Excel oder im Wiki)
• Anbindung ans System in Java
• Portierung für aktuelle Sprachen verfügbar
• http://fit.c2.com
Drei Fixture-Klassen
• ColumnFixture testet Ein-/Ausgabewertemengen.
• ActionFixture spielt ein Benutzerszenario durch
und ist deshalb gut für GUI-orientierte Tests
geeignet.
• RowFixture prüft eine Ergebnismenge
von Objekten mit ihren Attributen.