Alt trifft neu: JUnit 4 & 5 in einem Projekt

Keine Kommentare

JUnit ist das am weitesten verbreitete Framework für automatisierte Tests in Java. Seit einiger Zeit steht die Version 5 in den Startlöchern. Da diese weitreichende Veränderungen mit sich bringt, gibt es in vielen Projekten Hemmungen, auf den neuen Zug aufzuspringen. Dabei ist die parallele Verwendung von JUnit 4 und JUnit 5 ganz einfach, wie ich in diesem Blog Post zeigen werde.

Überblick

Während JUnit 4 noch komplett in einem Artefakt ausgeliefert wurde, hat sich dies mit JUnit 5 geändert. Im Wesentlichen gibt es jetzt drei Gruppen von Artefakten:

Um JUnit 4 und 5 zusammen in einem Projekt zu verwenden, brauche ich Artefakte aus letzteren zwei Bereichen. Ich nutze org.junit.jupiter:junit-jupiter-api, um die Klassen der neuen API nutzen zu können. org.junit.jupiter:junit-jupiter-engine wird verwendet, um JUnit-5-Tests auszuführen. Für die alten JUnit-4-Tests muss ich zusätzlich org.junit.vintage:junit-vintage-engine als Abhängigkeit hinzufügen. Zu guter Letzt ist es wichtig darauf zu achten, dass das Apache Maven Surefire Plugin mindestens in Version 22 verwendet wird, da erst diese Version JUnit-5-Tests unterstützt.

Maven-Konfiguration

Schauen wir uns also mal die Konfiguration an, die benötigt wird, um JUnit 4 und 5 im Parallelbetrieb zu benutzen:

Hier sind ein paar Dinge hervorzuheben. Mit den Properties maven.compiler.source und maven.compiler.target wird das Java-Sprachlevel explizit auf Java 8 eingestellt. Dies ist notwendig, da JUnit 5 Java 8 voraussetzt. Der Default in Maven 3.x ist jedoch Java 1.5. Wie zuvor beschrieben, sind Abhängigkeiten zur JUnit Jupiter API, zur JUnit Jupiter Engine und zur JUnit Vintage Engine hinzugefügt. Als Letztes ist im <build>-Bereich noch das Surefire Plugin explizit auf die Version 2.22 konfiguriert, da ansonsten auch die Default-Version der Maven-Installation verwendet wird.

Ein vollständiges Beispielprojekt inklusive JUnit-4- und -5-Tests, die von mvn test beide ausgeführt werden, habe ich auf GitHub vorbereitet.

Fazit

In diesem Blogpost habe ich gezeigt, wie man JUnit 4 zusammen mit JUnit 5 in einem Projekt einsetzen kann. Dazu ist lediglich ein wenig zusätzliche Konfiguration in der POM notwendig. Dies eröffnet die Möglichkeit einer schrittweisen Migration hin zu JUnit 5, ohne sofort die gesamte Testsuite umstellen zu müssen.

Benedikt Ritter arbeitet seit September 2013 als Software Crafter bei der codecentric AG. Sein Können bringt er nicht nur in der Berufswelt zum Einsatz: Benedikt ist Member der Apache Software Foundation und Committer beim Apache Commons Projekt.

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.