Есть метод
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);
}
}
Вы можете указать ожидаемое исключение в аннотации теста
@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");
Продвижение своими сайтами как стратегия роста и независимости