NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy,...
Transcript of NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy,...
5
NEUES VON JUNIT 5FROM REVOLUTION TO CONTINUOUS
EVOLUTION
5
MARC PHILIPP
So�ware Engineer bei
JUnit Commi�er seit 2012
Team Lead seit 2016
Twi�er:
Web:
@marcphilipp
marcphilipp.de
5
✋SHOW OF HANDS
5
JUNIT 5 RELEASES5.0 – 10. September 2017
5.1 – 18. Februar 2018
5.2 – 29. April 2018
5.3 – 11. September 2018
5.4 – 7. Februar 2019
5.5 – Juni 2019
5
AGENDA
1. Wie schreibt man Tests und Extensions mit JUnit 5?
2. Was ist die JUnit Pla�orm und wozu ist sie gut?
3. Was kommt noch und die fängt man mit JUnit 5 an?
5
JUNIT JUPITERJUNIT JUPITERJUNIT JUPITERJUNIT JUPITERJUNIT JUPITERDAS NEUE TESTING FRAMEWORK FÜR JAVADAS NEUE TESTING FRAMEWORK FÜR JAVADAS NEUE TESTING FRAMEWORK FÜR JAVADAS NEUE TESTING FRAMEWORK FÜR JAVADAS NEUE TESTING FRAMEWORK FÜR JAVA
Image: NASA
5
JUPITER? �
Nein, “Jupiter” ist einfach ein neuer Name zur besseren
Unterscheidung der verschiedenen Teile von JUnit 5.
… und es ist der fün�e Planet von der Sonne aus gezählt.
Is wri�ng tests rocket science now?
5
BASICS (DEMO)h�ps://github.com/marcphilipp/junit5‑
demo/tree/20190603‑etka
5
BASICS (RECAP)
ist jetzt in
ansta�
, , ,
haben neue Namen
sehen ähnlich aus – zusätzlich
,
Eigene sta� Camel Case
oder
ansta�
5
DISPLAY NAME GENERATORS 5.4
5
TEST METHOD ORDERING 5.4
hil� sicherzustellen,
dass Tests nicht Reihenfolge‑abhängig sind
und
für
Integra�onstests
Erweiterbar: implemen�eren
5
KOTLIN SUPPORT 5.1
5
WEITERE TESTARTEN (DEMO)h�ps://github.com/marcphilipp/junit5‑
demo/tree/20190603‑etka
5
WEITERE TESTARTEN (RECAP)
mit versch. ‑Annota�onen
, , ,
, , 5.4 ,
5.4 ,
,
für “flaky” Tests
um dynamisch Tests zu produzieren
5
PARALLEL EXECUTION 5.3 (DEMO)h�ps://github.com/marcphilipp/junit5‑
demo/tree/20190603‑etka
5
PARALLEL EXECUTION 5.3 (RECAP)
Tests laufen standardmäßig sequenziell
Parallele Ausführung lässt sich per Configura�on
Parameter ak�vieren
oder
zur deklara�ven Synchronisa�on
5
EXTENSIONS (DEMO)h�ps://github.com/marcphilipp/junit5‑
demo/tree/20190603‑etka
5
EXTENSIONS (RECAP)
Registrierung (beliebig viele gleichzei�g):
Deklara�v: an Klassen oder Methoden
Programma�sch: an Feldern 5.1
Global: per (s. )
Implemen�erung:
Marker Interface
1 Extension – n Extension Points/Interfaces
User Guide
5
COMPOSED ANNOTATIONSJupiter‑Annota�on können als Meta‑Annota�on verwendet
werden, um eigene Annota�onen zu definieren.
5
EXTENSION POINTS
Lifecycle: , ,
,
,
5.5 ,
, ,
, 5.5
Andere: , ,
5.3 ,
, 5.4 ,
5
TEMPORÄRE VERZEICHNISSE 5.4
5
BEDINGTE AUSFÜHRUNG 5.1
/
/
/
/
5
DEKLARATIVE TIMEOUTS 5.5
5
THIRD‑PARTY EXTENSIONSJUnit Pioneer, Spring, Mockito, Testcontainers, Docker,
Wiremock, JPA, Selenium/WebDriver, DbUnit, Ka�a, Jersey,
GreenMail, S3Mock, Citrus Framework, XWiki, …
h�ps://github.com/junit‑team/junit5/wiki/Third‑party‑
Extensions
5
AGENDA
1. Wie schreibt man Tests und Extensions mit JUnit 5? ✅
2. Was ist die JUnit Pla�orm und wozu ist sie gut?
3. Was kommt noch und die fängt man mit JUnit 5 an?
5
JUNIT PLATFORMJUNIT PLATFORMJUNIT PLATFORMJUNIT PLATFORMJUNIT PLATFORMPLATTFORM ZUM TESTEN AUF DER JVMPLATTFORM ZUM TESTEN AUF DER JVMPLATTFORM ZUM TESTEN AUF DER JVMPLATTFORM ZUM TESTEN AUF DER JVMPLATTFORM ZUM TESTEN AUF DER JVM
Image: NASA
5
JUNIT ALS PLATTFORM?
JUnit war schon immer eine Pla�orm
für IDEs und Build Tools
für andere Tes�ng Frameworks
Enge Kopplung (interne APIs, Reflec�on, Serializa�on)
5
�Wenn JUnit eine Pla�orm ist, dann sollten
wir die Architektur darauf auslegen!
5
5
JUNIT 5 =
JUPITER + VINTAGE + PLATFORM
5
THIRD‑PARTY ENGINESSpecsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms,
Mainrunner, …
h�ps://github.com/junit‑team/junit5/wiki/Third‑party‑
Extensions
5
MEHRERE TEST ENGINES (DEMO)h�ps://github.com/marcphilipp/junit5‑pla�orm‑demo
5
MEHRERE TEST ENGINES (RECAP)
Mehrere Test Engines können in einem Testlauf verwendet
werden
Unterscheidung zwischen Abhängigkeiten in
und
Erlaubt eine schri�weise Migra�on von einer Test Engine
zur anderen (z.B. von Vintage nach Jupiter)
5
KOMPATIBILITÄT / MIGRATION
Vintage Engine führt JUnit 3/4 Tests auf der Pla�orm aus
entspricht ‑Tag
Teilweise Unterstützung von JUnit 4
Unterstützung von 5.4
IDEs können Testklassen in die Jupiter API konver�eren
Migra�onswerkzeug aus der Community:
h�ps://github.com/junit‑pioneer/convert‑junit4‑to‑junit5
5
BUILD TOOLS
Gradle (≥ 4.6), Ant (≥ 1.10.3) und Maven Surefire (≥ 2.22.0)
unterstützen die JUnit Pla�orm
Mit dem kann man Tests über die
Kommandozeile ausführen und in andere Build Tools (z.B.
Bazel) integrieren
5
IDES
Sehr gute Unterstützung
IntelliJ IDEA (≥ 2016.2)
Eclipse (≥ 4.7.1a)
Visual Studio Code (Java Test Runner ≥ 0.4.0)
Netbeans (≥ 10.0)
Für andere IDEs gibt es
5
TAG EXPRESSIONS 5.1Erlauben präzise anzugeben, welche Tests basierend auf Tags
ausgeführt werden sollen:
5
UNTERSTÜTZUNG FÜR MODULE 5.1
Alle Tests in einem Modul ausführen:
Den Modulpfad scannen:
5
AGENDA
1. Wie schreibt man Tests und Extensions mit JUnit 5? ✅
2. Was ist die JUnit Pla�orm und wozu ist sie gut? ✅
3. Was kommt noch und die fängt man mit JUnit 5 an?
5
ROADMAP UNDROADMAP UNDROADMAP UNDROADMAP UNDROADMAP UNDRESSOURCENRESSOURCENRESSOURCENRESSOURCENRESSOURCEN
Image: NASA
5
ROADMAP
Wiederverwendbare Discovery für Test Engines 5.5 M1
Testausführung in nutzerdefinierten Threads 5.5 RC1
Deklara�ve/globale Timeouts 5.5 RC1
Repor�ng‑Format, das neue Features unterstützt
(z.B. Tags, Display Names, Report Entries) 5.6 M1
Deklara�ve Test Suiten
Parametrisierte Testklassen
Eure Ideen?
5
LOSLEGEN? LOSLEGEN!
User Guide:
Beispielprojekte für Ant, Bazel, Gradle und Maven:
Javadoc:
h�p://junit.org/junit5/docs/current/user‑guide/
h�ps://github.com/junit‑team/junit5‑samples
h�p://junit.org/junit5/docs/current/api/
5
GESUCHT: FEEDBACK!
StackOverflow:
Code & Issues:
Chat mit dem Team:
Twi�er:
h�p://stackoverflow.com/ques�ons/tagged/junit5
h�ps://github.com/junit‑team/junit5/
h�ps://gi�er.im/junit‑team/junit5
h�ps://twi�er.com/juni�eam
5
BEISPIEL‑CODE
Jupiter:
Pla�orm:
h�ps://github.com/marcphilipp/junit5‑
demo/tree/20190603‑etka
h�ps://github.com/marcphilipp/junit5‑pla�orm‑demo
5
FRAGEN? / auf Twi�er@marcphilipp @juni�eam
5
VIELEN DANK!