47
5 NEUES VON JUNIT 5 FROM REVOLUTION TO CONTINUOUS EVOLUTION

NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

NEUES VON JUNIT 5FROM REVOLUTION TO CONTINUOUS

EVOLUTION

Page 2: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

MARC PHILIPP

So�ware Engineer bei 

JUnit Commi�er seit 2012 

Team Lead seit 2016

Twi�er:   

Web: 

@marcphilipp

marcphilipp.de

Page 3: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

✋SHOW OF HANDS

Page 4: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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

Page 5: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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?

Page 6: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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

Page 7: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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?

Page 8: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

BASICS (DEMO)h�ps://github.com/marcphilipp/junit5‑

demo/tree/20190603‑etka

Page 9: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

BASICS (RECAP)

 ist jetzt in 

 ansta� 

,  ,  , 

haben neue Namen

 sehen ähnlich aus – zusätzlich

Eigene   sta� Camel Case

 oder 

 ansta� 

Page 10: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

DISPLAY NAME GENERATORS  5.4

Page 11: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

TEST METHOD ORDERING  5.4

 hil� sicherzustellen,

dass Tests nicht Reihenfolge‑abhängig sind

 und

 für

Integra�onstests

Erweiterbar:   implemen�eren

Page 12: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

KOTLIN SUPPORT  5.1

Page 13: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

WEITERE TESTARTEN (DEMO)h�ps://github.com/marcphilipp/junit5‑

demo/tree/20190603‑etka

Page 14: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

WEITERE TESTARTEN (RECAP)

 mit versch.  ‑Annota�onen

,  ,  ,

,  ,    5.4 ,

  5.4 ,

,

 für “flaky” Tests

 um dynamisch Tests zu produzieren

Page 15: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

PARALLEL EXECUTION  5.3  (DEMO)h�ps://github.com/marcphilipp/junit5‑

demo/tree/20190603‑etka

Page 16: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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

Page 17: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

EXTENSIONS (DEMO)h�ps://github.com/marcphilipp/junit5‑

demo/tree/20190603‑etka

Page 18: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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

Page 19: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

COMPOSED ANNOTATIONSJupiter‑Annota�on können als Meta‑Annota�on verwendet

werden, um eigene Annota�onen zu definieren.

Page 20: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

EXTENSION POINTS

Lifecycle:  ,  ,

,

,

  5.5 ,

,  ,

,    5.5

Andere:  ,  ,

  5.3 ,

,    5.4 ,

Page 21: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

TEMPORÄRE VERZEICHNISSE  5.4

Page 22: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

BEDINGTE AUSFÜHRUNG  5.1

/

/

/

/

Page 23: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

DEKLARATIVE TIMEOUTS  5.5

Page 24: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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

Page 25: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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?

Page 26: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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

Page 27: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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)

 

Page 28: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

�Wenn JUnit eine Pla�orm ist, dann sollten

wir die Architektur darauf auslegen!

Page 29: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

Page 30: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

JUNIT 5  =  

JUPITER + VINTAGE + PLATFORM

Page 31: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

THIRD‑PARTY ENGINESSpecsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms,

Mainrunner, …

h�ps://github.com/junit‑team/junit5/wiki/Third‑party‑

Extensions

Page 32: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

MEHRERE TEST ENGINES (DEMO)h�ps://github.com/marcphilipp/junit5‑pla�orm‑demo

Page 33: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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)

Page 34: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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

Page 35: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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

Page 36: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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 

Page 37: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

TAG EXPRESSIONS  5.1Erlauben präzise anzugeben, welche Tests basierend auf Tags

ausgeführt werden sollen:

Page 38: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

UNTERSTÜTZUNG FÜR  MODULE  5.1

Alle Tests in einem Modul ausführen:

Den Modulpfad scannen:

Page 39: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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?

Page 40: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

ROADMAP UNDROADMAP UNDROADMAP UNDROADMAP UNDROADMAP UNDRESSOURCENRESSOURCENRESSOURCENRESSOURCENRESSOURCEN

Image: NASA

Page 41: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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?

Page 42: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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/

Page 43: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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

Page 44: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

UNTERSTÜTZT DAS JUNIT‑TEAM!

 

h�ps://junit.org/sponsoring

Page 45: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

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

Page 46: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

FRAGEN? /   auf Twi�er@marcphilipp @juni�eam

Page 47: NEUES VON JUNIT 5 - Entwicklertag · KOTLIN SUPPORT 5.1. 5 WEITERE TESTARTEN (DEMO) ... Specsy, Spek, KotlinTest, Cucumber, Drools, jqwik, Brahms, ... Vintage Engine führt JUnit

5

VIELEN DANK!