Refactoring mit Infinitest

In den letzten beiden Folgen habe wir uns zwei Software Crafting Themen angeschaut. Approval Testing, ein schneller Weg, um eine „gute“ Testabdeckung von vorhandenen Code zu erreichen und Mob-Programming, eine Technik, um Probleme gemeinsam und gleichzeitig in kleinen Gruppen zu lösen. In diesem Blog wollen wir das Ganze mit einem Tool namens Infinitest abrunden.

 

Wir möchten ein Refactoring von einem Stück Code vornehmen. Dabei spielt es keine Rolle, ob der Code von unserem aktuellen Projekt stammt oder nur eine reine Übung (Kata/Dojo) ist. Wenn wir das Refactoring nicht alleine machen wollen, dann ist dies eine Gelegenheit, Mob-Programming auszuprobieren.

In einem ersten Schritt müssen wir sicherstellen, dass die Testabdeckung des Codes hoch ist. Dabei bietet uns Approval Testing eine gute Möglichkeit dies zu ändern, falls es keine oder nur wenige Tests gibt.

Beim eigentlichen Refactoring möchten wir in ganz kleinen Schritten etwas am Code anpassen. Die Tests werden danach fortgesetzt, um sicherzustellen, ob der Code immer noch funktioniert. Dieser Vorgang kann mit dem Tool Infinitest unterstützt und erleichtert werden.

Testrunner Infinitest

 

Infinitest ist ein ein “Continuous” Testrunner, der nach jeder Codeänderung alle Tests laufen lässt und uns durch ein Icon anzeigt, ob die Tests noch grün sind. Die Codeänderung kann dabei eine von der IDE unterstütztes Refactoring sein oder ein manuelle Codeänderung. Anschliessend ein Speichern der Änderung.

Das Tool ist Open Source und ist als Plugin für Eclipse sowie Intellij vorhanden. Auf der Webseite gibt es für beide IDEs Anleitungen, wie Infinitest konfiguriert wird.

Sehen wir uns das Ganze doch an einem konkreten Beispiel an.

Wir haben:

  • eine Klasse Calculator mit einer Methode sum(), die 2 int Werte zusammenzählt
  • einen Test in der Klasse CalculatorTest
  • Infinitest installiert und konfiguriert. Dies sehen wir an dem grauen Infinitest Icon.

Sobald wir etwas in der Calculator ändern, entweder durch…

  • ein von der IDE unterstütztes Refactoring
  • oder eine Anpassung in der Calculator Klasse (mit anschliessendem Speichern),

… führt Infinitest alle JUnit Tests aus. Initial sollte das Icon grün sein.

Wenn wir die Implementation von sum() anpassen (indem wir 1 addieren) und speichern, führt Infinitest die Test aus und wird nun rot.

Gerade wenn wir ein Refactoring machen, erhalten wir mit Infinitest eine gewisse Sicherheit, dass keinen Code gebrochen ist. Voraussetzung ist natürlich eine gute Testabdeckung.

Weiterführende Links:

 

Kommentare sind geschlossen.