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, KI, 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.