J'utilise mockito dans un test junit. Comment faire pour qu'une exception se produise et ensuite affirmer qu'elle s'est produite (pseudo-code générique) ?
Réponses
Trop de publicités?Pour répondre d'abord à votre deuxième question. Si vous utilisez JUnit 4, vous pouvez annoter votre test avec
@Test(expected=MyException.class)
pour affirmer qu'une exception s'est produite. Et pour "simuler" une exception avec mockito, utilisez
when(myMock.doSomething()).thenThrow(new MyException());
BDD Solution de style (mise à jour vers Java 8)
Mockito n'est pas la meilleure solution pour gérer les exceptions. Mockito avec Catch-Exception
Mockito + Catch-Exception + AssertJ
given(otherServiceMock.bar()).willThrow(new MyException());
when(() -> myService.foo());
then(caughtException()).isInstanceOf(MyException.class);
Exemple de code
Dépendances
Si vous voulez également tester le message d'exception, vous pouvez utiliser ExpectedException de JUnit avec Mockito :
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test
public void testExceptionMessage() throws Exception {
expectedException.expect(AnyException.class);
expectedException.expectMessage("The expected message");
given(foo.bar()).willThrow(new AnyException("The expected message"));
}
Réponse mise à jour pour le 19/06/2015 (si vous utilisez java 8).
Utilisez simplement assertj
Utilisation de assertj-core-3.0.0 + Java 8 Lambdas
@Test
public void shouldThrowIllegalArgumentExceptionWhenPassingBadArg() {
assertThatThrownBy(() -> myService.sumTingWong("badArg"))
.isInstanceOf(IllegalArgumentException.class);
}
Référence : http://blog.codeleak.pl/2015/04/junit-testing-exceptions-with-java-8.html
- Réponses précédentes
- Plus de réponses