Und noch mehr testen

JUnit 5.3 ist da und bringt parallele Testausführung

Katharina Degenmann

© Shutterstock / Maksim Kabakou

Die JUnit-Plattform dient als Grundlage für die Ausführung von Test-Frameworks auf der JVM. Nach einiger Entwicklungszeit ist nun vor Kurzem die aktuelle Version JUnit 5.3 erschienen. Die interessanteste neue Funktion ist die parallele Testausführung. Aber auch beim Erfassen des Konsolen-Outputs hat sich etwas getan. Wir werfen einen Blick auf die wichtigsten Neuerungen.

Das Team von JUnit, dem Framework zum Testen von Java-Programmen, hat Anfang September die neueste Version des Frameworks, JUnit 5.3, vorgestellt. Die wohl größte Neuerung ist die neu eingeführte parallele Testausführung.

Die parallele Testausführung wird in der aktuellen JUnit-Version über die Build-Datei, also beispielsweise pom.xml oder build.gradle, aktiviert und konfiguriert. Das Verhalten der parallelen Testausführung kann auf Methoden- und Klassenebene mit den Annotationen @Execution und @ResourceLock geändert werden. Einen tiefen Einblick in das parallele Testen bietet Billy Konrado in einem Fachartikel zum Thema.

„assertThrows“ und das Erfassen des Konsolen-Outputs

Eine weitere Neuerung betraf in JUnit 5.3 die Assertion assertThrow. Diese wurde aktualisiert und zeigte (wenn vorhanden) den von einer Methode zurückgegebenen Wert an, wenn keine Ausnahme ausgelöst wurde. assertThrow sollte insbesondere dann hilfreich sein, wenn man einen Test einem Debugging unterzieht, der bereits Fehler verursacht hat. Das Feature wurde im Hotfix-Update JUnit 5.3.1, das Anfang der Woche veröffentlicht wurde, allerdings wieder herausgenommen. Offenbar wurde bei der Verwendung bestehender Code zerstört.

Eine weitere Veränderung fand beim Erfassen des Konsolen-Outputs statt: Mit JUnit 5.3 ist es möglich, den Output von System.out und System.err mit via TestExecutionListener zu erfassen. Laut JUnit, ist das Erfassen des Konsolen-Outputs zwar nicht oft erforderlich, könnte aber hilfreich sein, sollte man an mehreren Legacy-Code-Basen arbeiten, bei denen Anweisungen häufig in die Konsole geschrieben werden, und man gerne sehen möchte, was in einem Report geschrieben wurde.

Um die Erfassung von Konsolen-Output zu starten, sind zwei Schritte erforderlich. Zunächst muss ein TestExecutionListener implementiert und anschließend Surefire konfiguriert werden. Erst dann kann man mit der Erfassung des Outputs beginnen.

public class ConsoleOutputListener implements TestExecutionListener {

	@Override
	public void reportingEntryPublished(TestIdentifier testIdentifier, ReportEntry entry) {
		entry.getKeyValuePairs().values().stream().forEach(c -> System.out.println("Captured output: " + c));
		TestExecutionListener.super.reportingEntryPublished(testIdentifier, entry);
	}

}

Implementierung von TestExecutionListener / Quelle: Billy Korando

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.22.0</version>
	<configuration>
		<properties>
			<configurationParameters>
				junit.platform.output.capture.stdout=true
				junit.platform.output.capture.stderr=true
			</configurationParameters>
		</properties>
	</configuration>
</plugin>

Konfiguration von Surefire / Quelle: Billy Korando

Wer die parallele Testausführung gerne selbst testen möchte und weitere Informationen benötigt, kann dazu den User Guide konsultieren. Alles Weitere gibt es im Blog-Beitrag von Billy Korando.

Geschrieben von
Katharina Degenmann
Katharina Degenmann
Katharina Degenmann studiert Philosophie an der Goethe-Universität Frankfurt am Main. Seit Februar 2018 arbeitet sie in der Redaktion der Software & Support Media GmbH. Nebenbei ist sie als freie Journalistin tätig, ihre ersten redaktionellen Erfahrungen hat sie bei einem regionalen Radiosender gesammelt.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: