Я использую mockito в тесте junit. Как вы делаете исключение, а затем утверждаете, что он имеет (общий псевдокод)
Mockito Как насмехаться и утверждать брошенное исключение?
Ответ 1
BDD Style Solution
Одно только Mockito - не лучшее решение для обработки исключений, используйте Mockito с Catch-Exception
Mockito + Catch-Exception + AssertJ
given(otherServiceMock.bar()).willThrow(new MyException());
when(() -> myService.foo());
then(caughtException()).isInstanceOf(MyException.class);
Образец кода
зависимости
Ответ 2
Сначала ответьте на свой второй вопрос. Если вы используете JUnit 4, вы можете аннотировать свой тест с помощью
@Test(expected=MyException.class)
чтобы утверждать, что произошло исключение. И для "издевки" исключения с mockito используйте
when(myMock.doSomething()).thenThrow(new MyException());
Ответ 3
Если вы хотите проверить сообщение об исключении, вы также можете использовать JUnit ExpectedException с 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"));
}
Ответ 4
Сделать исключение таким:
when(obj.someMethod()).thenThrow(new AnException());
Убедитесь, что это произошло либо, утверждая, что ваш тест выдает такое исключение:
@Test(expected = AnException.class)
Или обычной проверкой:
verify(obj).someMethod();
Последняя опция требуется, если ваш тест предназначен для доказательства промежуточного кода, обрабатывающего исключение (т.е. исключение не будет выбрано из вашего тестового метода).
Ответ 5
Если вы используете JUnit 4 и Mockito 1.10.x Аннотируйте свой тестовый метод с помощью:
@Test(expected = AnyException.class)
и для использования искомого исключения:
Mockito.doThrow(new AnyException()).when(obj).callAnyMethod();
Ответ 6
Обновленный ответ за 06/19/2015 (если вы используете java 8)
Просто используйте assertj
Использование assertj-core-3.0.0 + Java 8 Lambdas
@Test
public void shouldThrowIllegalArgumentExceptionWhenPassingBadArg() {
assertThatThrownBy(() -> myService.sumTingWong("badArg"))
.isInstanceOf(IllegalArgumentException.class);
}
Ссылка: http://blog.codeleak.pl/2015/04/junit-testing-exceptions-with-java-8.html
Ответ 7
Используйте Mockito doThrow, а затем поймайте нужное исключение, чтобы утверждать, что оно было сгенерировано позже.
@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);
}
Ответ 8
Используя mockito, вы можете сделать исключение.
when(testingClassObj.testSomeMethod).thenThrow(new CustomException());
Используя Junit5, вы можете утверждать исключение, утверждает, генерируется ли это исключение при вызове метода метода.
@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());
}
Найти образец здесь: assert exception junit
Ответ 9
Не связанный с mockito, можно поймать исключение и утвердить его свойства. Чтобы убедиться, что это исключение произошло, утвердите ложное условие в блоке try после инструкции, которая генерирует исключение.
Ответ 10
Или, если ваше исключение выдается из конструктора класса:
@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);
}
Ответ 11
Утвердить сообщением об исключении:
try {
MyAgent.getNameByNode("d");
} catch (Exception e) {
Assert.assertEquals("Failed to fetch data.", e.getMessage());
}