Annotations JUnit 5 avec exemples

JUnit 5 est la prochaine génération de JUnit. L'objectif est de créer une base à jour pour les tests côté développeur sur la JVM. Cela inclut de se concentrer sur Java 8 et supérieur, ainsi que d'activer de nombreux styles de test différents.

Vous pouvez utiliser à la fois Maven et Gradle.

Si vous utilisez Maven, vous devez ajouter la dépendance suivante à votre pom.xml déposer:




org.junit.jupiter
junit-jupiter-api
5.3.1
test


org.junit.jupiter
junit-jupiter-params
5.3.1
test


@JUnit 5 Annotations

Vous remarquerez que dans Junit 5, l'un des changements les plus évidents est que les classes et méthodes de test n'ont plus besoin d'être publiques.

Passons maintenant en revue la liste des annotations JUnit 5 les plus courantes.


@Test

Cette annotation indique qu'une méthode est une méthode de test. Notez que cette annotation ne prend aucun attribut.

import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; class JUnit5Test {

@Test
void helloJUnit5() {
assertEquals(10, 5+5);
} }

@ParameterizedTest

Les tests paramétrés permettent d'exécuter un test plusieurs fois avec différents arguments. Ils sont déclarés comme regular @Test mais utilisez les méthodes @ParameterizedTest annotation à la place.

De plus, vous devez déclarer au moins une source qui fournira les arguments pour chaque appel, puis consommera les arguments dans la méthode de test.

Par exemple, l'exemple suivant illustre un test paramétré qui utilise @ValueSource annotation pour spécifier un tableau String comme source d'arguments.


Exemple:

import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import static org.junit.jupiter.api.Assertions.assertTrue; class JUnit5Test {
@ParameterizedTest
@ValueSource(strings = { 'cali', 'bali', 'dani' })
void endsWithI(String str) {
assertTrue(str.endsWith('i'));
} }

@Test répété

JUnit 5 a la capacité de répéter un test un nombre spécifié de fois simplement en annotant une méthode avec @RepeatedTest et en spécifiant le nombre total de répétitions souhaitées.

Chaque appel d'un test répété se comporte comme l'exécution d'un @Test régulier | méthode.

Ceci est particulièrement utile dans les tests d'interface utilisateur avec Selenium.


import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.RepeatedTest; import org.junit.jupiter.api.RepetitionInfo; import org.junit.jupiter.api.TestInfo; import static org.junit.jupiter.api.Assertions.assertEquals; class JUnit5Test {

@RepeatedTest(value = 5, name = '{displayName} {currentRepetition}/{totalRepetitions}')
@DisplayName('RepeatingTest')
void customDisplayName(RepetitionInfo repInfo, TestInfo testInfo) {
int i = 3;
System.out.println(testInfo.getDisplayName() +

'-->' + repInfo.getCurrentRepetition()
);


assertEquals(repInfo.getCurrentRepetition(), i);
} }

Comme vous pouvez le voir d'après le résultat du test, lorsque i==3, le test réussit, sinon il échoue.

@Afficher un nom

Les classes de test et les méthodes de test peuvent déclarer des noms d'affichage personnalisés qui seront affichés par les exécuteurs de test et les rapports de test.

Exemple:


import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInfo; @DisplayName('DisplayName Demo') class JUnit5Test {
@Test
@DisplayName('Custom test name')
void testWithDisplayName() {
}
@Test
@DisplayName('Print test name')
void printDisplayName(TestInfo testInfo) {
System.out.println(testInfo.getDisplayName());
} }

@BeforeEach

Le @BeforeEach l'annotation indique que la méthode annotée doit être exécutée avant chaque méthode de test, comme pour JUnit 4 @Before.

Exemple:

import org.junit.jupiter.api.*; class JUnit5Test {
@BeforeEach
void init(TestInfo testInfo) {
String callingTest = testInfo.getTestMethod().get().getName();
System.out.println(callingTest);
}
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
} }

Production:

firstTest 1 secondTest 2

@Après chaque

Cette annotation indique que la méthode annotée doit être exécutée après chaque méthode de test, comme pour JUnit 4 @After. Par exemple, si les tests doivent réinitialiser une propriété après chaque test, nous pouvons annoter une méthode avec @AfterEach pour cette tâche.


import org.junit.jupiter.api.*; class JUnit5Test {
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
}
@AfterEach
void after(TestInfo testInfo) {
String callingTest = testInfo.getTestMethod().get().getName();
System.out.println(callingTest);
} }

Production:

1 firstTest 2 secondTest

@Avant tout

Cette annotation exécute une méthode avant tous les tests. Ceci est analogue au @BeforeClass de JUnit 4. Le @BeforeAll l'annotation est généralement utilisée pour initialiser diverses choses pour les tests.

Exemple:

import org.junit.jupiter.api.*; class JUnit5Test {
@BeforeAll
static void init() {
System.out.println('Only run once before all tests');
}
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
} }

Production:

Only run once before all tests 1 2

@Après tout

Le @AfterAll l'annotation est utilisée pour exécuter la méthode annotée, uniquement après que tous les tests ont été exécutés. Ceci est analogue à @AfterClass de JUnit 4 | . Nous utilisons cette annotation pour supprimer ou terminer tous les processus à la fin de tous les tests.

Exemple:

import org.junit.jupiter.api.*; class JUnit5Test {
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
}
@AfterAll
static void after() {
System.out.println('Only run once after all tests');
} }

Production:

1 2 Only run once after all tests

@Étiqueter

Nous pouvons utiliser cette annotation pour déclarer des balises pour les tests de filtrage, que ce soit au niveau de la classe ou de la méthode.

Le @Tag L'annotation est utile lorsque nous voulons créer un pack de tests avec des tests sélectionnés.

Exemple:

import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @Tag('smoke') class JUnit5Test {
@Test
@Tag('login')
void validLoginTest() {
}
@Test
@Tag('search')
void searchTest() {
} }

@Désactivée

Le @Disabled l'annotation est utilisée pour désactiver ou ignorer les tests au niveau de la classe ou de la méthode. Ceci est analogue à @Ignore de JUnit 4.

Lorsqu'ils sont déclarés au niveau de la classe, tous @test les méthodes sont ignorées. Lorsque nous utilisons @Disabled au niveau de la méthode, seule la méthode annotée est désactivée.

Exemple:

@Disabled utilisé pour désactiver une classe de test:

import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @Disabled class DisabledClassDemo {
@Test
void testWillBeSkipped() {
} }

Exemple:

@Disabled annotation utilisée pour désactiver la méthode de test:

import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; class DisabledTestsDemo {
@Disabled
@Test
void testWillBeSkipped() {
}
@Test
void testWillBeExecuted() {
} }