
Mit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von YouTube.
Mehr erfahren
JUnit ist ein Framework, das zum automatisierten Testen von Java-Code verwendet wird. Wie der Name verrät, geschehen diese Tests dabei unitweise, also auf Basis einzelner Klassen und Methoden statt ganzer monolithischer Softwareblöcke. Entwickelt wurde JUnit ursprünglich von Erich Gamma und Kent Beck, ist als Open-Source-Sofware aber heute längst Gegenstand einer internationalen Entwickler-Community, die das Framework sukzessive immer weiter entwickelt. Teil dieser Community ist auch Christian Stein, Softwareentwickler bei Micromata, der uns als Speaker dieses TECH TALKS JUnit 5 vorstellt.
Was ist Test-Driven Development mit JUnit?
JUnit ist Teil des so genannten Test-Driven Development und zählt damit zu den agilen Methoden. Agil bedeutet, dass der Entwicklungsprozess einer Software iterativ und inkrementell verläuft: Die Entwicklung der Anwendung wird nicht als großer Wurf anvisiert und en bloc umgesetzt, vielmehr erfolgt die Realisierung in vielen kleinen aufeinander folgenden Schritten. Insbesondere bei großen und komplexen IT-Projekten bewährt sich der agile Workflow, da Fehler so nicht bis zum Ende mitgeschleppt werden, sondern schon während der einzelnen Entwicklungsschritte auffliegen und korrigiert werden können. Dabei leistet ein Testing-Framework wie JUnit unschätzbar wertvolle Dienste.
Noch bevor der Entwickler mit dem Programmieren der eigentlichen Software beginnt, schreibt er einen automatisch wiederholbaren JUnit-Test. Dabei legt er die Anforderungen zugrunde, die ihm zumeist in Form eines Pflichtenheftes vorliegen. Praktisch, denn damit hat er schon vor dem Startschuss genau definiert, was sein Code können muss und wie er funktionieren soll. Wenn dann im Verlauf eines Projektes ein anderer Entwickler den betreffenden Code ändern möchte, kann er anhand dieses JUnit-Test vorher sicherstellen, dass der Ausgangscode fehlerfrei ist. JUnit kennt dabei übrigens nur zwei Testresultate: Grün für fehlerfrei und Rot für fehlerhaft. Wenn er nun nach Verrichtung seines eigenen Werkes den Test erneut über den Code laufen lässt, und dieser Rot hervorbringen sollte, weiß er, dass er irgendwo in seinen Änderungen einen Fehler eingebaut haben muss.
Mit diesem pragmatischen Ansatz entspricht JUnit dem Prinzip der testgetriebenen Entwicklung oder auch „test-driven development“. Ziel ist es, versteckte Fehler nicht bis zum Ende mitzuschleppen bzw. vorhandenen Code nicht unbemerkt zu verschlimmbessern – insbesondere bei umfangreichen Software-Projekten ein entscheidender Vorteil.
JUnit 5
Seit seinem ersten Release hat JUnit wesentlich dazu beigetragen, testgetriebene Entwicklung überhaupt zu ermöglichen. Im Oktober 2015 hat die Entwicklung der komplett überarbeiteten Version 5 begonnen, und seit September 2017 ist JUnit 5 nun vollumfänglich verfügbar.
JUnit 5 besteht aus den drei Modulen JUnit Platform, JUnit Jupiter und JUnit Vintage.
- Die JUnit Plattform bietet die Basis für allen Testengines auf der JVM (Java Virtual Machine). Sie stellt außerdem einen Console Launcher bereit, damit die Anwendung über die Kommandozeile angesteuert werden kann und Plug-ins für Gradle und Maven gebaut werden können.
- JUnit Jupiter kombiniert das neue Programmiermodell und das Extension Model für das eigentliche Schreiben der Tests und liefert zudem eine Testengine für juniper-basierte Tests.
- JUnit Vintage bietet die TestEngine für ältere JUnit-Versionen
Christian Stein spricht in seinem TECH TALK über die Motivation für diese Neuentwicklung sowie über kleine und große Designentscheidungen des JUnit- 5-Teams. Weiter wird die neue, stark modulare Architektur vorgestellt, die mit besonderem Fokus auf Skalierbarkeit und Kompatibilität von Tools entworfen wurde. So wird zum ersten Mal explizit zwischen einer Basis-Plattform und einzelnen Testengines unterschieden. Dies ermöglicht die Koexistenz verschiedener Testengines, so dass z. B. JUnit-4- und JUnit-5-Tests gemeinsam ausgeführt werden können. Für Erweiterungen wurde ein feingranulares Extension-Modell eingeführt.
Nicht zuletzt bringt das neue Release neben Bewährten auch manche interessante Neuerung für Entwickler wie etwa Parameter Injection, dynamische oder Nested Tests.