JUnit 5 in Version 5.10.2 veröffentlicht
Vor ein paar Tage ist eine neue Version veröffentlich worden. Dann mal ein Quicktest. Was ist neu? Das gibt es hier. Ergebnis des Quicktest:
Wenzlaff.de – Rund um die Programmierung
mit Java, Raspberry Pi, SDR, Linux, Arduino, Sicherheit, Blender, Statistik, Krypto und Blockchain
Vor ein paar Tage ist eine neue Version veröffentlich worden. Dann mal ein Quicktest. Was ist neu? Das gibt es hier. Ergebnis des Quicktest:
Diese JRE Enum gibt es auch schon seit 5.1 in JUnit 5. Tests sollen eigentlich nicht an der Java Version hängen. Aber manchmal braucht man sie doch.
Das Ziel für JUnit Tests sollte es eigentlich sein, die Tests so zu schreiben das sie auf „allen“ Betriebssystemen laufen. Das geht leider nicht immer. Manchmal will man oder kann man einen JUnit Test nur auf einem bestimmten OS-System laufen lassen. Z.B. der Test läuft nur unter Windows. Seit JUnit 5.1 (aktuell ist übrigens schon …
„Bedingten Ausführungen in JUnit @EnabledOnOs(value = OS.WINDOWS, disabledReason=““)“ weiterlesen
Unterstriche in JUnit 5 Test-Methoden und Klassen können auch per Default automatisch für alle Tests nach Leerzeichen konvertiert werden. Es sieht auch gleich besser aus: Dazu einfach im src/test/resources Verzeichnis die Datei junit-platform.properties anlegen mit diesem Eintrag:
Eben ist die neue Version JUnit 5.9.0 M1 veröffentlicht worden. Dann mal ein Quicktest. Ergebnis alles noch grün: Was gibt es Neues?
Warum wird in JUnit 5-Test kein public mehr verwendet? „Less is more“ sagt das JUnit-5 Team und die Testklassen liegen ja eh meistens im gleichen (Test) Package. Auch ist so eine besser Kapselung möglich.
Heute ist eine neue Version von JUnit 5 veröffentlich worden. Wenn das kein Grund für ein Quicktest ist: Ja es läuft noch. Mal was anderes, ein Phyton Test für ein Smart-Contract auf der Ethereum-Blockchain:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
from brownie import Gehirn, accounts def test_deploy(): account = accounts.load("freeaccount") gehirn = Gehirn.deploy({"from": account}) ini_iq = gehirn.retrieve() expected = 0 assert ini_iq == expected def test_update(): account = accounts.load("freeaccount") gehirn = Gehirn.deploy({"from": account}) expected = 15 ini_iq = gehirn.store(expected, {"from": account}) assert expected == gehirn.retrieve() |
Und hier der dazu passende Smart-Contract mit Solidity:
Wenn man eine REST-Api überprüfen will, ob ein Timeout auftritt, kann man die @Timeout Annotation von JUnit 5 verwenden. Z.B. wenn der REST-Service nicht nach 2 Sekunden (es gehen auch Tage, Stunden, Ms, …) zurückkommt, schlägt der JUnit Test fehl: @Timeout(value = 2, unit = TimeUnit.SECONDS)
Seit JUnit 5.1 gibt es das OS Enum. Mit der können leicht Tests in Abhängigkeit des OS durchgeführt werden. Es werden die folgenden Betriebssysteme unterstüzt: Also nur die Methode z.B. mit der @EnabledOnOs(OS.MAC) Annotation versehen, und der Test läuft nur auf dem Mac 🙂 oder nicht dann mit @DisabledOnOs(OS.MAC): …
JUnit und auf Maven Central JUnit 5.7.0
REST-Api mit Quarkus in 15 Minuten erstellen
Vor zwei Tagen wurde die neue JUnit Version 5.6.0 veröffentlicht. Also die BOM aktuallisieren:
1 2 3 4 5 6 |
<dependency> <groupId>org.junit</groupId> <artifactId>junit-bom</artifactId> <version>5.6.0</version> <type>pom</type> </dependency> |
Und ein kleiner Test mit zwei Projekten:
Wenn Java 8 und ein aktuelles Maven auf dem Raspberry Pi installiert ist, kann man in unter 5 Minuten eine komplette REST-Anwendung mit statischer Webseite erstellen und starten. Die dann sogar Hot Reloading fähig ist. Das geht in drei Schritten und das sogar auf einem Raspberry Pi Zero: 1. Ein neues leeres Verzeichnis erstellen und …
Mit der @CsvSource Annotation in JUnit 5 kann man mit Kommaseparierte Parameter leicht und übersichtliche Tests schreiben. Die API ist aber noch im EXPERIMENTAL Status. Hier mal ein Beispiel. Für jeden Kommandozeilen Parameter eine Testmethode schreiben:
Es können nun Methoden mit der @Nested Annotation verschachtelt werden. Als Klammer dient eine Innere-Klasse: In der IDE können dann auch nur diese Klammern ausgeführt werden. public in den Methoden-Signaturen ist nun auch optional! Das alles macht das JUnit 5 Testen viel übersichtlicher.
Warum wird beim ausführen dieses JUnit 5 Tests die Fehlermeldung angezeigt, das kein Test vorhanden ist? Es ist nicht die fehlende @Test Annotation, die wird bei einem @ParameterizedTest nicht gebraucht. Die Lösung …
Wie können die Testmethoden einer Klasse automatisch in zufälliger Reihenfolge ausgeführt werden? Ab JUnit 5.4 geht das mit der Annotation @TestMethodOrder. Es wird nur die @TestMethodOrder(MethodOrderer.Random.class) Annotation an der jeweiligen Test-Klasse benötigt. Die Zufallsfunktion wird mit Hilfe der System.nanoTime() Funktion erzeugt. Also ein Pseudozufall. Aber für Test reicht es. Wir verwenden diese Testklasse:
Wie können die Testmethoden einer Klasse automatisch in alphabetischer Reihenfolge ausgeführt werden? Ab JUnit 5.4 geht das mit der Annotation @TestMethodOrder Es wird nur die @TestMethodOrder(MethodOrderer.Alphanumeric.class) Annotation an der jeweiligen Test-Klasse benötigt. Mit dem Alphanumeric wird die Reihenfolge auf alphabetischer gesetzt.
Normal sollte die Testreihenfolge ja nicht festgelegt werden. Da eine Test-Methode nicht von einer anderen abhängig sein sollte. Manchmal wird das aber dennoch benötigt. Das geht jetzt ab JUnit 5.4 ganz einfach mit der @Order Annotation. Hier eine Beispiel Klasse.
Also mal testen ob alle läuft? Kleine Änderung in der pom.xml
1 2 3 4 |
<junit.version>4.12</junit.version> <junit.jupiter.version>5.4.0</junit.jupiter.version> <junit.vintage.version>5.4.0</junit.vintage.version> <junit.platform.version>1.4.0</junit.platform.version> |
Dann mal zwei Projekt umstellen. Siehe da, die Buildpipeline laufen auch noch wie erwartet: und die auch
Es wurde vorgestern eine neue Version von JUnit 5 veröffentlicht, siehe https://junit.org/junit5/docs/5.4.0-M1/release-notes/ Mindmap zum Thema
Gestern noch 20 Jahre wenzlaff.de gefeiert und heute schon ein JUnit Quicki zum sortieren mit stream sorted und kein Raspberry Pi Thema. Der JUnit Test:
Es gibt jetzt für die JUnit View bei Fehlern einen neuen Button, der automatisch den Fehler-Trace in der Console View öffnet. Einfach unten rechts klicken in der JUnit View klicken:
Was gibt es neues in JUnit 5.3.0-M1? Hier eine Beispiel POM:
Mit den neuen Tags (org.junit.jupiter.api.Tag) können Methoden und auch ganze Klassen getagt werden, um sie z.B. in Gruppen einzuteilen. Eine Testgruppe könnte z.B. eine langlaufende DB Methoden sein, die nicht immer ausgeführt werden soll. Ein Tag muss folgenden Syntax Regeln folgen: -ein Tag darf nicht Leer sein -ein Tag darf keine Leerzeichen enthalten -ein Tag …
Wie kann eine Vaadin Spring Boot mit Hibernate Anwendung auf JUnit 5 für Eclipse Oxygene 3A umgestellt werden? 1. Deaktivieren wir die JUnit (4.12) Libs in der pom.xml:
1 2 3 4 5 6 7 8 9 10 11 12 |
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <!-- Kein JUnit 4 mehr für den Test--> <exclusions> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> </exclusions> </dependency> |
2. Fügen wir die nötigen JUnit 5 Libs in der pom.xml hinzu:
1 2 3 4 5 6 7 8 9 10 11 12 |
<!-- Alles für JUnit 5 --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <scope>test</scope> </dependency> <!-- and the engine for surefire and failsafe --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> |
3. Wir fügen JUnit 5 dem Buildpfad hinzu: Es sieht dann so aus:
Mit shellcheck kann man gut Shell Scripte überprüfen.Das kann man einfach online, über diese GUI www.shellcheck.net ausprobieren oder aber auch installieren. Für den Raspberry Pi gibt es schon ein installations Packet, deshalb ist die Installation mit
1 2 3 |
sudo apt install shellcheck # Testen welche Version installiert wurde# # version: 0.4.4 |
schnell erledigt. Das ist nun nicht gerade die aktuelle Version 0.5.0 aber immerhin. Ein selbst compilieren kommt für …
In JUnit 5 gibt es im Package org.junit.jupiter.api die Klasse Assumptions (Annahme). Die Assumptions Klasse ist eine Sammlung von Util-Methoden. Im Gegensatz zu den Assertions (Behauptungen) wird die Assumptions im Fehlerfall nicht mit einem failure (graues Kreuz) sondern mit einem Error (rot) markiert. Deshalb ist es manchmal gewünscht, wenn z.B. eine Bestimmte Umgebung nicht vorhanden …
Wenn man an einer zentralen Stelle Testmethoden annotieren will, geht das mit JUnit 5 über eigene Benutzer Annotationen. Ich habe mir eine Annotation für Performance Test geschrieben. Z.B. kann ich sie dann zentral ausschalten:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package de.wenzlaff.umgebung; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Tag; /** * Annotation für Performance Tests. Zentral ausgeschaltet. * * @author Thomas Wenzlaff www.kleinhirn.eu */ @Disabled @Target({ ElementType.TYPE, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Tag("Performance") public @interface Performance { } |
In diesem Testlauf, habe ich mit der Annotation, die lange laufenden Test ausgeschaltet: Wofür nutzt ihr die Custom Composed Annotation? …
„Wie können mit JUnit 5 Custom Composed Annotation erstellt werden?“ weiterlesen
Nun ist endlich das finale GA Release 5.0 veröffentlicht worden. Diese Änderungen sind in der pom.xml nötig, und schon läuft es mit JUnit 5.
Manchmal möchte man sehen, wie der vorletzte Testlauf abgelaufen ist. Man kann defaultmäßig die letzten 10 Testläufe wieder zur Anzeige bringen über:
Manchmal möchte man die lokalen JUnit 5 Testergebnisse für später aufheben oder als Doku verwenden oder sichern. Man kann die Ergebnisse als XML exportieren und auch später wieder importieren. So kann man sich dann Fehler oder Laufzeiten mal wieder anschauen. Die Import und Export Menüs, erscheinen aber nur, wenn schon mal ein JUnit Test gelaufen …
„JUnit 5 Test-Ergebnisse Import und Export im XML Format mit Eclipse Oxygen“ weiterlesen
Heute wurde das JUnit 5 (RC3 – Beta) Plugin für Eclipse Oxygen 4.7.0 veröffentlicht (upgedated). JUnit 5 RC3 wurde schon am 23.8.2017 veröffentlicht. Der JUnit 5 Release Kandidat soll ja noch im 3. Quatal 2017 erscheinen, also im nächsten Monat 🙂 Wie wird das nun installiert? Das JUnit 5 Plugin gibt es hier. Einfach diesen …
„Wie wird JUnit 5 (RC3 – Beta) Eclipse Oxygen 4.7.0 Support (Plug-In) installiert?“ weiterlesen
Will man Testfälle aus einer CSV-Datei verwenden, geht das mit JUnit 5 Super einfach. Es gibt da eine neue Annotation @CsvFileSource der nur der Dateiname der CSV-Datei übergeben werden muss, und schon wird für jede Zeile der Test ausgeführt. Die Datei muss im Classpath liegen und mit Komma (,) getrennt sein. Sie darf keine Überschrift …
In JUnit 5 gibt es nun die Möglichkeit, Testmethoden mit Parametern ausszuführen. Anstatt der @Test Annnotation verwendet man die @ParameterizedTest. Nun braucht man noch eine Datenquelle mit @ValueSource. Diese Klassen liegen in:
Wollte mal mein REST Testprogramm auf JUnit 5 umstellen. Die neuen JUnit 5 Feature sind schon sehr interessant. Vor ein paar Tagen ist der neue M6 veröffentlicht worden (JUnit 5.0.0-M6 = Platform 1.0.0-M6 + Jupiter 5.0.0-M6 + Vintage 4.12.0-M6). Auch ist die Architektur nun grundlegend geändert. Und evl. will man schon mal die Neuen Features …
„Rest Test Programm: Java Migration von JUnit 4 nach JUnit 5 (1.0.0.-M6)“ weiterlesen
Manchmal will man eine Testmethode öfter ausführen. Das ist ja leicht mit einer Schleife möglich. JUnit 5 bietet nun aber eine schöne Annotation an @RepeatedTest. Mit der kann leicht die Anzahl der Wiederholungen angegeben werden. Über die Methodenparameter TestInfo und RepetitionInfo kann zur Laufzeit auf die Klassennamen, Methodennamen und aktuellen runden Wert zugegriffen werden. Hier …
„חזרות Wiederholungen mit JUnit 5: @RepeatedTest“ weiterlesen
Einige Namen von Annotationen wurden in JUnit 5 gändert, also von @Ignore nach @Disabled und … Weitere Details
JUnit Testmethoden sollten so geschrieben werden, das sie unabhängig von anderen Methoden sind. Die Reihenfolge der ausführung der Test-Methoden in einer Testklasse ist auch nicht garantiert und kann von lauf zu lauf unterschiedlich sein. Das ist auch gut so. Manchmal möche man aber dennoch eine bestimmte Reihenfolge. Dies kann seit JUnit 4.11 mit der @FixMethodOrder(MethodSorters.NAME_ASCENDING …
„Java: Reihenfolge der Testmethoden mit FixMethodOrder in JUnit festlegen“ weiterlesen
Nach über 2 Jahren ist nun eine neue Version von JUnit veröffentlicht worden. Die Releasenotes sind auf Github zu finden. In folgenden Bereichen gab es Ergänzungen: Assertions Command-line options Test Runners Exception Testing Timeout for Tests Parameterized Tests Rules Theories Categories Use with Maven Miscellaneous Ok, dann mal gleich das aktuelle Maven Projekt TWFlug auf …
JUnit-Plugin von Eclipse:
Auf dieser Seite von Frank Westphal gibt es das E-Book „Testgetriebenen Entwicklung mit JUnit und Fit“ kostenlos zum download im PDF-Format. Es ist immer noch sehr aktuell. Vielen Dank für die kostenlose Bereitstellung. Kennt ihr noch weitere gute kostenlose E-Books? Dann hinterlasst bitte hier einen Kommentar.
Die Regel, nur eine assert-Anweisung pro Testmethode zu verwenden, mag drakonisch klingen erleichtert aber die Übersicht (siehe Blog von Dave Astels). Obwohl ich auch keine Angst habe von dieser Regel abzuweichen. Was ist Eure Meinung? Wer testet ist feige?
Was ist richtig? … String testString = testobjekt.getTestwertAlsString(); // a: assertEquals(„expected“, testString); // oder // b: assertEquals(testString, „expected“);
Der Brier-Wert ist ein effizientes und einfaches Maß zur Bewertung der Genauigkeit probabilistischer Vorhersagen. Durch die Kombination aus einfacher Berechnung und aussagekräftiger Analyse ist er ein weit verbreitetes Werkzeug in der Statistik und im maschinellen Lernen. In der Praxis hilft er, die Qualität von Vorhersagen quantitativ zu bewerten und kann zur Verbesserung von Modellen und …
„Der Brier-Score (Brier-Wert) nicht nur für Prognostiker“ weiterlesen