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?Faites en sorte que l'exception se passe comme ceci :
when(obj.someMethod()).thenThrow(new AnException());
Vérifiez que cela s'est produit soit en affirmant que votre test lèvera une telle exception :
@Test(expected = AnException.class)
Ou par une vérification normale du simulacre :
verify(obj).someMethod();
Cette dernière option est nécessaire si votre test est conçu pour prouver que le code intermédiaire gère l'exception (c'est-à-dire que l'exception ne sera pas levée par votre méthode de test).
Utilisez DoThrow de Mockito et ensuite attraper l'exception désirée pour affirmer qu'elle a été levée plus tard.
@Test
public void fooShouldThrowMyException() {
// given
val myClass = new MyClass();
val arg = mock(MyArgument.class);
doThrow(MyException.class).when(arg).argMethod(any());
Exception exception = null;
// when
try {
myClass.foo(arg);
} catch (MyException t) {
exception = t;
}
// then
assertNotNull(exception);
}
En utilisant mockito, vous pouvez faire en sorte que l'exception se produise.
when(testingClassObj.testSomeMethod).thenThrow(new CustomException());
En utilisant Junit5, vous pouvez asserter une exception, qui affirme si que L'exception est déclenchée lorsque méthode de test est invoquée.
@Test
@DisplayName("Test assert exception")
void testCustomException(TestInfo testInfo) {
final ExpectCustomException expectEx = new ExpectCustomException();
InvalidParameterCountException exception = assertThrows(InvalidParameterCountException.class, () -> {
expectEx.constructErrorMessage("sample ","error");
});
assertEquals("Invalid parametercount: expected=3, passed=2", exception.getMessage());
}
Trouvez un échantillon ici : assert exception junit
Ou si votre exception est levée depuis le constructeur d'une classe :
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void myTest() {
exception.expect(MyException.class);
CustomClass myClass= mock(CustomClass.class);
doThrow(new MyException("constructor failed")).when(myClass);
}