Gérer les exceptions avec JUnit

J’écris cet article après avoir butté sur la gestion d’une exception dans un test unitaire; En effet, je n’avais pas vu le changement entre JUnit 4 et 5.

JUnit 4

Je ne vais pas faire le tour de toutes les possibilités, voici juste la manière que je trouve la plus simple et directe de vérifier une exception.

@Test(expected = RuntimeException.class)
public void should_ThrowException_while_DoingMyThing() {
  var service = new MyService();
  service.doTheThingThatThowTheException();
}

Il existe également une autre méthode qui offre plus de controle sur l’exception, en utilisant des @Rule que je ne décris pas ici. En effet, je n’en ai jamais eu besoin et je trouve cette syntaxe trop verbeuse.

JUnit 5

Avec JUnit 5, je trouve cela moins direct, mais nous gagnons en finesse sur les vérifications que nous pouvons faire sur l’exception qui est levée.

@Test
public void should_ThrowException_while_DoingMyThing() {
  RuntimeException thrown = Assertions.assertThrows(RuntimeException.class, () -> {
    var service = new MyService();
    service.doTheThingThatThowTheException();
  }

  assertThat(thrown.getMessage()).isEqualTo("Fake exception message");
}

On obtient un controlle total sur l’exception qui est levée et elle n’apparait plus dans les logs comme avant. La syntaxe reste tout de même assez concise. Bref j’aime bien.