NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy,...

Post on 06-Aug-2020

1 views 0 download

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

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

UNTERSTÜTZT DAS JUNIT‑TEAM!

 

h�ps://junit.org/sponsoring

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!