JUnit5 @RunWith

JUnit5 @RunWith

1. introduction

Dans cet article rapide, nous aborderons l'utilisation de l'annotation@RunWith dans le framework JUnit 5.

Dans JUnit 5,the @RunWith annotation has been replaced by the more powerful @ExtendWith annotation.

Cependant, l'annotation@RunWith peut toujours être utilisée dans JUnit5 pour des raisons de compatibilité descendante.

2. Exécution de tests avec un runner basé sur JUnit4

Nous pouvons exécuter des tests JUnit5 avec n'importe quel autre environnement JUnit plus ancien en utilisant l'annotation@RunWith.

Voyons un exemple d’exécution de ces tests dans une version Eclipse qui ne prend en charge que JUnit4.

Commençons par créer le cours que nous allons tester:

public class Greetings {
    public static String sayHello() {
        return "Hello";
    }
}

Ensuite, créons ce test JUnit5 simple:

public class GreetingsTest {
    @Test
    void whenCallingSayHello_thenReturnHello() {
        assertTrue("Hello".equals(Greetings.sayHello()));
    }
}

Enfin, ajoutons cette annotation pour pouvoir exécuter le test:

@RunWith(JUnitPlatform.class)
public class GreetingsTest {
    // ...
}

La classeJUnitPlatform est un runner basé sur JUnit4 qui nous permet d'exécuter des tests JUnit4 sur la plateforme JUnit.

Soitkeep in mind that JUnit4 does not support all the features of the new JUnit Platform, so this runner has a limited functionality.

Si nous vérifions le résultat du test dans Eclipse, nous pouvons voir qu'un coureur JUnit4 a été utilisé:

junit4 test

3. Exécution de tests dans un environnement JUnit5

Exécutons maintenant le même test dans une version Eclipse prenant en charge JUnit5. Dans ce cas, nous n’avons plus besoin de l’annotation@RunWith et nous pouvons écrire le test sans runner:

public class GreetingsTest {
    @Test
    void whenCallingSayHello_thenReturnHello() {
        assertTrue("Hello".equals(Greetings.sayHello()));
    }
}

Le résultat du test montre que nous utilisons désormais le runner JUnit5:

junit5 test

4. Migrer depuis un Runner basé sur JUnit4

Migrons maintenant un test qui utilise un exécuteur basé sur JUnit4 vers JUnit5.

Nous allons utiliser un test Spring comme exemple:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { SpringTestConfiguration.class })
public class GreetingsSpringTest {
    // ...
}

Si nous voulons migrer ce test vers JUnit5, nous devons remplacer l'annotation@RunWith par les nouveaux@ExtendWith:

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = { SpringTestConfiguration.class })
public class GreetingsSpringTest {
    // ...
}

La classeSpringExtension est fournie par Spring 5 et intègre Spring TestContext Framework dans JUnit 5. L'annotation@ExtendWith accepte toute classe qui implémente l'interfaceExtension.

5. Conclusion

Dans ce bref article, nous avons couvert l’utilisation de l’annotation@RunWith de JUnit 4 dans le framework JUnit5.

Le code source complet des exemples est disponibleover on GitHub.