Testrecorder – Quo Vadis
Nach meinem Vortrag auf dem Karlsruher Entwicklertag habe ich jetzt auch einmal Zeit ein wenig über die Zukunft von Testrecorder zu reden … Testrecorder ist ein Java-Werkzeug zum Aufzeichnen von Laufzeitsituationen. Ausgehend von einem Methodenaufruf werden der Zustand davor und der Zustand danach aufgezeichnet. Das Ergebnis wird dann als JUnit-Test ausgegeben.
Wie erfolgt die Aufzeichnung mit Testrecorder?
Vor und nach annotierten Methoden zeichnet Testrecorder Zustände folgender Objekte auf:
- Argumente des Methodenaufrufs
- Return-Wert des Methodenaufrufs
- This-Objekt
- Globale Variablen
- Input/Output
- Exceptions
Aus diesem Programmzustand werden Tests generiert. Dazu existieren
- generische Adaptoren, die praktisch jedes Java-Objekt repräsentieren können (allerdings etwas komplizierter in der Lesbarkeit sind)
- spezielle Adaptoren für gängige Konzepte, die besonders auf Lesbarkeit optimiert sind:
- Objekte werden bevorzugt über Konstruktoren erzeugt
- Objekte werden bevorzugt über Settern erzeugt
- Arrays, Lists, Sets, Maps werden mit Factory-Methoden oder Addern/Puttern erzeugt
Wie wird sich Testrecorder weiterentwickeln?
Ich habe laufend Ideen, wie man Testrecorder noch weiter verbessern kann. Die aktuell größten Meilensteine sind:
- Trennung der Serialisierung des Zustands von der Generierung der Tests
- Besser lesbare Tests
- Bessere Unterstützung großer Datenmengen
Wo kann ich mehr zu Testrecorder erfahren?
Den aktuellen Stand von Testrecorder findet man auf der Projekt-Homepage. Dort findet man auch etwas Dokumentation und Links zu Beispielen. Wer an einer interaktiven Einführung interessiert ist: Ich plane den Testrecorder auch auf anderen Konferenzen vorzustellen, in Vorträgen oder Workshops. Den nächsten Termin werde ich in diesem Blog ankündigen.
Gibt es Alternativen für Testrecorder auch in anderen Programmiersprachen?
In Java gab es vor Testrecorder ein paar interessante Ansätze. Man findet per Suchmaschine noch ein kommerzielles Werkzeug, wobei die Dokumentation etwas vage ist, sodass man sich fragt ob es wirklich so viel leistet. Folgende Open-Source-Ansätze sind wohl nicht weiter verfolgt worden:
Für .NET habe ich folgende Werkzeuge gefunden, noch aktiv, aber nicht ganz so ambitioniert:
Mich persönlich würde hier noch Javascript interessieren. Leider habe ich da bisher nichts Vergleichbares gefunden.