JUnit 5 is een software testframework dat door ontwikkelaars wordt gebruikt om hun code te unit testen. Het is een op Java gebaseerd framework dat het schrijven en uitvoeren van tests op het Java-platform mogelijk maakt, inclusief een geïntegreerde reporter die de testresultaten weergeeft.
JUnit kan worden gebruikt voor automatiseringstesten voor twee hoofddoeleinden:
- Testen of de software werkt zoals verwacht
- Fouten in de code vinden en rapporteren en deze zo snel mogelijk oplossen
In deze blog zullen we ons richten op en leren over de installatie, configuratie en basismethoden die worden gebruikt in JUnit 5.
Wat Is JUnit 5?
JUnit 5 is de nieuwste versie van het JUnit-testframework. Het ondersteunt Java 8 en nieuwere versies, ondersteunt verschillende teststijlen en biedt een moderne basis voor ontwikkelaarstests op de JVM.
Het belangrijkste voordeel van het gebruik van JUnit is de modulariteit, omdat het meerdere modules bevat die ontwikkelaars in staat stellen om verschillende componenten van de software eenvoudig te testen. Het kan ook worden gebruikt om individuele klassen van de toepassing te testen in plaats van de gehele toepassing.
Kenmerken van JUnit 5
De volgende zijn enkele van de populaire en belangrijke kenmerken van JUnit 5 die het onderscheiden van andere unit testframeworks.
Feature | Description | Annotations/Method |
---|---|---|
Test Suites |
Test suites zijn in feite een groep tests, zoals Smoke, Sanity, of een groep tests die gerelateerd zijn aan een specifieke functie. JUnit 5 maakt het mogelijk om test suites te maken die samen kunnen worden uitgevoerd. |
Om Test Suites te gebruiken, moeten we een JUnit Platform Suite afhankelijkheid toevoegen en de volgende annotaties gebruiken.@SelectPackages ,@SelectClasses , @Suite |
Asserties | Asserties worden gebruikt om het verwachte gedrag van de software te verifiëren. JUnit 5 biedt ingebouwde assertiemethoden die kunnen helpen bij het eenvoudig uitvoeren van de asserties. | Er zijn meerdere assertiemethoden beschikbaar in de klasse import org.junit.jupiter.api.Assertions; .Enkele van de methoden zijn hieronder vermeld: assertTrue() , assertFalse() ,assertEquals() , assertAll() , assertNotEquals() |
Testuitvoeringsvolgorde | Past de testuitvoeringsvolgorde aan. Het maakt het mogelijk voor de ontwikkelaar om de controle over de testuitvoering te nemen en de tests in een specifieke volgorde uit te voeren zoals vereist. | @TestMethodOrder , @Order ,@TestClassOrder |
Uitzonderingstests | Voert uitzonderingstests uit die verifiëren dat de vereiste uitzondering in de test wordt gegooid. | De volgende methode uit deimport org.junit.jupiter.api.Assertions; klasse wordt gebruikt: assertThrows() |
Testafhankelijkheden | Testafhankelijkheden stellen sequentiële testen in staat door de mogelijkheid te bieden testmethoden op elkaar te laten afhangen. Dit betekent dat de volgende testmethode, die afhankelijk is van de vorige testmethode, niet wordt uitgevoerd tenzij de vorige slaagt. Dit is een handige functie bij het schrijven van integratietests. | @TestInstance |
Tests Uitschakelen | Schakelt tests of testklassen uit. | @Disabled |
Time-outs | Faalt een test als de uitvoeringstijd een opgegeven duur overschrijdt. | @Timeout |
Rapporten | Biedt een ingebouwde reporter om testresultaten te analyseren en toont gedetailleerde informatie. Genereert een .html bestand met testuitvoeringsresultaten. |
N.V.T. |
JUnit 4 vs. JUnit 5
Met de release van de nieuwste versie van JUnit, namelijk JUnit 5, zijn er meerdere wijzigingen en nieuwe functies aan het framework toegevoegd. De verschillen tussen de twee versies zijn in de onderstaande tabel weergegeven:
criteria | JUNIT4 | JUNIT5 |
---|---|---|
Architectuur | Alles was verpakt in een enkele JAR-bestand. | Onderverdeeld in 3 subprojecten: – JUnit Platform – JUnit Jupiter – JUnit Vintage |
JDK-versievereiste | Vereist Java 5 of hoger | Vereist Java 8 of hoger |
3rd Party Integratie | Geen ondersteuning voor 3rd party integratie voor plugins en IDE’s | Toegewijd subproject (JUnit Platform) voor 3rd party integraties |
Ondersteuning voor Geneste Tests | Geen annotatie voor het schrijven van Geneste tests | Biedt de annotatie @Nested om Geneste tests te schrijven |
Ondersteuning voor Registreren van Aangepaste Extensies | Geen ondersteuning voor aangepaste extensies | Biedt de annotatie @ExtendWith om aangepaste extensies te registreren |
Wijzigingen in Veelgebruikte Annotaties | – @BeforeClass – @AfterClass – @Before – @After – @Ignore |
– @BeforeAll – @AfterAll – @BeforeEach – @AfterEach – @Disabled |
Annotatiewijzigingen voor Tagging en Filteren | De annotatie @Category wordt gebruikt |
De annotatie @Tag wordt gebruikt |
Test Suites | Er werden @RunWith en @Suite annotaties gebruikt |
De annotaties @Suite , @SelectPackages en @SelectClasses worden gebruikt |
Aan de slag met JUnit 5
In dit gedeelte zullen we leren hoe we testcases kunnen schrijven met behulp van JUnit 5 in IntelliJ IDE. Omdat deze al standaard is meegeleverd met JUnit 5, hoeven we geen extra installatie uit te voeren om het te gebruiken.
We moeten een nieuw Maven-project maken, de JUnit 5-afhankelijkheden toevoegen en meteen beginnen met het schrijven van de tests.
Het toevoegen van de JUnit-afhankelijkheden in het Maven-project
De volgende JUnit 5-afhankelijkheden moeten worden toegevoegd in het pom.xml-bestand:
- JUnit Jupiter Engine
- JUnit Jupiter API
- JUnit Platform Suite(Aggregator)
- JUnit Jupiter Params
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
Hier is het volledige pom.xml-bestand
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.github.mfaisalkhatri</groupId>
<artifactId>junit-basic</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>junit-basic</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Na het toevoegen van de afhankelijkheden zijn we helemaal klaar om de test te schrijven. Maar voordat we doorgaan met het schrijven van de tests met JUnit 5, laten we eerst de basisannotaties begrijpen die ons efficiënt kunnen helpen bij het opzetten van de testsuite en het uitvoeren van tests zoals gewenst.
Basisannotaties gebruikt in JUnit 5
De volgende zijn basisannotaties die het meest populair zijn bij ontwikkelaars bij het schrijven van tests met JUnit 5.
@BeforeAll-annotatie
De annotatie @BeforeAll
geeft aan dat de geannoteerde methode moet worden uitgevoerd vóór alle @Test
, @RepeatedTest
, @ParameterizedTest
of @TestFactory
methoden in de huidige klasse. Het moet een statische methode zijn in de testklasse.
@BeforeAll
dient als vervanging voor de @BeforeClass
annotatie die werd gebruikt in JUnit 4.x
Syntax:
public class BasicTest {
public static void beforeAllTest() {
System.out.println("Before All method called!!");
}
//..
}
Annotation @BeforeEach
De annotatie @BeforeEach
geeft aan dat de geannoteerde methode moet worden uitgevoerd vóór elke oproep van @Test
, @RepeatedTest
, @ParameterizedTest
of @TestFactory
methoden in de huidige klasse.
Het maakt deel uit van de testlevenscyclusmethoden en vervangt de @Before
annotatie die werd gebruikt in JUnit 4.
Syntax:
public class BasicTest {
public void beforeEachTest() {
System.out.println("Before Each method called!!");
}
//...
}
Annotation @AfterAll
De annotatie @AfterAll
geeft aan dat de geannoteerde methode moet worden aangeroepen nadat alle tests in de huidige klasse zijn uitgevoerd. Het moet een statische methode zijn en wordt gebruikt als een afbreekmethode in de testklasse.
De @AfterAll
annotatie is de vervanging van de @AfterClass
annotatie in JUnit 4.
Syntax:
public class BasicTest {
//...
public static void afterAllMethod() {
System.out.println("After All method called!!");
}
}
Annotation @AfterEach
De annotatie @AfterEach
geeft aan dat de geannoteerde methode moet worden uitgevoerd na elke @Test
, @RepeatedTest
, @ParameterizedTest
of @TestFactory
methode in de huidige klasse.
Het dient als de JUnit 5 vervanger voor de @After
annotatie die in JUnit 4 wordt gebruikt.
Syntax:
public class BasicTest {
//...
public void afterEachMethod() {
System.out.println("After Each method called!!");
}
}
@Test Annotatie
De @Test
annotatie geeft aan dat de geannoteerde methode een testmethode is. De testmethode mag geen privé of statische methode zijn en mag geen waarde retourneren.
Syntax:
public class BasicTest {
//..
public void testMethod() {
System.out.println("Test Method Called!!");
}
}
@DisplayName Annotatie
De @DisplayName
annotatie wordt gebruikt om een aangepaste naam op te geven voor de geannoteerde testklasse of -methode. Deze aangepaste namen kunnen spaties, speciale tekens en zelfs emoji’s bevatten en worden doorgaans gebruikt in de testverslagen die door IDE’s en buildtools worden gegenereerd.
Syntax:
"Demo Test class") (
public class BasicTest {
//...
"This is a demo test") (
public void testMethod() {
System.out.println("Test Method Called!!");
}
}
@Disabled Annotatie
De @Disabled
annotatie in JUnit 5 wordt gebruikt om de testmethode of testklasse uit te sluiten van de test suite voor uitvoering.
Wanneer deze wordt toegepast op een testklasse, worden alle methoden binnen de testklasse automatisch als uitgeschakeld beschouwd. Deze annotatie heeft een optionele parameter waarmee de reden voor het uitschakelen van de test kan worden opgegeven.
Syntax:
public class BasicTest {
"Test method disabled") (
public void testMethod() {
System.out.println("Test Method Called!!");
}
//...
}
Hoe geautomatiseerde testgevallen te schrijven met JUnit 5
Het is tijd om de code in te duiken en onze handen vuil te maken met JUnit 5. We zullen een nieuwe Java-klasse maken, BasicTest.
public class BasicTest {
//..
}

Alle basisannotaties die we hebben besproken, zullen worden behandeld als onderdeel van de demonstratie.
Laten we methoden toevoegen aan de BasicTest-klasse om het gebruik van de annotaties @BeforeAll
, @BeforeEach
, @AfterAll
, @AfterEach
, @Test
, @DisplayName
en @Disabled
te demonstreren die beschikbaar zijn in JUnit 5.
"Demo Test class") (
public class BasicTest {
public static void beforeAllTest() {
System.out.println("Before All method called!!");
}
public void beforeEachTest() {
System.out.println("Before Each method called!!");
}
"This is a demo test") (
public void testMethodOne() {
System.out.println("Test Method One Called!!");
}
"This test is disabled to demo disable annotation") (
public void disabledTest() {
System.out.println("This is a disabled test!!");
}
public void testMethodTwo() {
System.out.println("Test Method Two Called!!");
}
public void afterEachMethod() {
System.out.println("After Each method called!!");
}
public static void afterAllMethod() {
System.out.println("After All method called!!");
}
}
Code Walkthrough
De @DisplayName
-annotatie boven de testklasse zal de testnaam weergeven als “Demo test class” in de resultaten wanneer de test wordt uitgevoerd.
De beforeAllTest()
-methode wordt uitgevoerd vóór alle tests en zal de tekst “Before All method Called!!”
afdrukken. Vervolgens wordt de beforeEachTest()
-methode vóór elke test uitgevoerd en drukt de tekst “Before Each Method called!!”
af.
Er zijn drie testmethoden in deze klasse, namelijk, testMethodOne()
, testMethodTwo()
en disabledTest()
. Alle drie testmethoden hebben de @Test-annotatie
erboven, wat aangeeft dat dit testmethoden zijn.
De disabledTest()
-methode zal niet worden uitgevoerd omdat deze de @Disabled
annotatie erboven heeft.
Na elke testuitvoering zal de afterEachTestMethod()
worden uitgevoerd omdat deze de @AfterEach
annotatie erboven heeft.
Tenslotte, nadat alle tests zijn uitgevoerd, zal de afterAllMethod()
worden uitgevoerd omdat deze de @AfterAll
annotatie erboven heeft.
Testuitvoering
De tests kunnen worden uitgevoerd door met de rechtermuisknop op de testklasse te klikken en ‘Run ‘

Een andere manier is door te klikken op het groen gekleurde afspeelpictogram naast de declaratie van de testklasse, zoals te zien is in de onderstaande schermafbeelding:

De volgende schermafbeelding van IntelliJ IDE toont aan dat de tests succesvol zijn uitgevoerd.

Op de bovenstaande schermafbeelding is te zien dat de weergavenaam van de testklasse is afgedrukt, ook kan de uitgeschakelde test worden gezien en de reden voor de uitgeschakelde test wordt afgedrukt in de console.
Alle testmethoden, inclusief de voortest en na-test, zijn succesvol uitgevoerd en de respectievelijke resultaten zijn afgedrukt op de console.
Samenvatting
JUnit 5 is een krachtig testframework dat door ontwikkelaars wordt gebruikt om unit testing van de code uit te voeren. Het wordt ook gebruikt door testautomatiseringsingenieurs om testautomatiseringsscripts te schrijven en uit te voeren. Het heeft uitgebreide functies waarmee ontwikkelaars en testers de testscripts kunnen schrijven en unit testing van de code kunnen uitvoeren.
Het biedt ook meerdere methoden om beweringen en verificaties uit te voeren die handig zijn bij het schrijven van geautomatiseerde tests. Naast het schrijven en uitvoeren van de testscripts, biedt het ook een testrapport dat kan worden gebruikt om de testuitvoeringsresultaten aan belanghebbenden te demonstreren om de testdekking te tonen.
Gelukkig testen!
Source:
https://dzone.com/articles/beginners-guide-to-junit-5