Как в Mockito проверять на исключения?

258
21 декабря 2016, 00:11

Есть метод

public ResponseEntity<?> deleteMessage(@PathVariable Long id) {
    if (!messageService.delete(id)) {
        throw  new DataNotFoundException("Data with id=" + id + " not found.");
    }
    return new ResponseEntity<>(HttpStatus.OK);
}

И тест к нему

@Test
public void deleteMessageIfNotFoundThenException() {
    //prepare
    when(messageController.deleteMessage(2L)).thenThrow(DataNotFoundException.class);
    //testing
    ResponseEntity<?> failedDelete = messageController.deleteMessage(2L);
    //validate
    verify(messageController).deleteMessage(2L);
}

Ну пойму как правильно проверять, тест не проходит.

И DataNotFoundException

public class DataNotFoundException extends RuntimeException {
    public DataNotFoundException(String message) {
        super(message);
    }
}
Answer 1

Вы можете указать ожидаемое исключение в аннотации теста

@Test(expected = DataNotFoundException.class)
public void deleteMessageIfNotFoundThenException() {
    //prepare
    when(messageController.deleteMessage(2L)).thenThrow(DataNotFoundException.class);
    //testing
    ResponseEntity<?> failedDelete = messageController.deleteMessage(2L);
}

Если вы хотите сохранить BDD-стиль теста, можете воспользоваться библиотекой catch-exception. Код будет примерно такой:

verifyException(messageController, IndexOutOfBoundsException.class).deleteMessage(2L);

или такой, если вы хотите проверить дополнительно свойства исключения.

when(messageController).deleteMessage(2L);
then(caughtException())
    .isInstanceOf(DataNotFoundException.class)
    .hasMessageContaining("your message here");
READ ALSO
thymeleaf регистрация

thymeleaf регистрация

Здравствуйте,у меня возник вопрос почему не работает регистрация нового пользователя? Пишу на java использую spring boot и thymeleafЗаранее большое...

384
Как cгенерировать KeyEvent для двух кнопок?

Как cгенерировать KeyEvent для двух кнопок?

Как cгенерировать KeyEvent для двух кнопок ? То есть чтоб сгенерировалась комбинация двух кнопок, например Alt и G

365
Как задать путь к файлу

Как задать путь к файлу

Доброго времени суток, мне нужно задать путь к файлу в метод decryptFile и encryptFileЧуть раньше я вывел путь к файлу в TextView с помощью метода getRealPathFromURI

266
Как у EditText в JAVA сделать маску?

Как у EditText в JAVA сделать маску?

У компонента EditText требуется сделать следующую маску для ввода: градусы, минуты, секунды

296