Montag, 23. April 2007

TDD für Fortgeschrittene - Teil 2: Unittests mit Mocks

Tammo kommt beim Thema Unittests sehr schnell zu Testen mit Mocks und stellt EasyMock vor. Mit Java 5 ist Easy-Mock nochmal ein ganzes Stück eleganter als mit JDK 1.4. Jetzt sollen die Teilnehmer das Taschenrechner-Beispiel mit Unittests programmieren. Die Teilnehmer können entweder neu beginnen oder ihren bereits erstellten Code refaktorisieren.

Tammo zitiert Frank Westphal mit einem ebenso einfachen wie nützlichen Ausspruch: "Jedes Test-Problem lässt sich durch eine zusätzliche Indirektion lösen." Tatsächlich führen z.B. Mock-Tests häufig dazu, dass man Factories einführen. Die Annahme der testgetriebenen Entwicklung ist dabei stets, dass die so entstehenden Strukturen auch für den Produktionscode einen guten Entwurf darstellen.

Die Diskussionen zwischendurch kreisen immer wieder auch um die Frage, wie man mit existierendem Code umgehen kann. Meine persönliche Meinung dazu ist, dass es häufig nicht sinnvoll ist, Unit-Tests auf existierenden Code aufzusetzen. Das wird zu aufwendig. Dann verlieren die Entwickler die Lusts am Testen und werden es auch nicht mehr richtig tun. Sinnvoller ist es, Akzeptanztests für den existierenden Code zu schreiben und die Unit-Tests schrittweise zusammen mit dem Refaktorisieren des existierenden Codes einzuführen.