Comme répondu précédemment, il existe de nombreuses façons de composer avec des exceptions dans JUnit. Mais avec Java 8, il y en a une autre: l'utilisation des Expressions Lambda. Avec les Expressions Lambda, nous pouvons réaliser une syntaxe comme celle-ci:
@Test
public void verifiesTypeAndMessage() {
assertThrown(new DummyService()::someMethod)
.isInstanceOf(RuntimeException.class)
.hasMessage("Runtime exception occurred")
.hasMessageStartingWith("Runtime")
.hasMessageEndingWith("occurred")
.hasMessageContaining("exception")
.hasNoCause();
}
assertThrown accepte une interface fonctionnelle, les instances qui peuvent être créés avec les expressions lambda, la méthode des renvois ou références constructeur. assertThrown accepter que l'interface allons attendre et être prêt à gérer une exception.
C'est relativement simple, mais puissante technique.
Jetez un oeil à ce blog décrivant cette technique: http://blog.codeleak.pl/2014/07/junit-testing-exception-with-java-8-and-lambda-expressions.html
Le code source peut être trouvé ici: https://github.com/kolorobot/unit-testing-demo/tree/master/src/test/java/com/github/kolorobot/exceptions/java8