У меня есть контроллер Spring, который выдает ошибку, когда нет данных.Я хочу проверить исключение, которое является пользовательским NoDataFoundException
, но оно всегда выдает org.springframework.web.util.NestedServletException
Сообщение об ошибке модульного теста: java.lang.Exception: Unexpected exception, expected<com.project.NoDataFoundException> but was<org.springframework.web.util.NestedServletException>
Проверка модуля контроллера
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {MockConfiguration.class})
@WebAppConfiguration
public class ModelControllerTest{
private MockMvc mockMvc;
@Inject
private ModelController controller;
@Inject
private ResponseBuilder responseBuilder;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
}
@Test(expected = NoDataFoundException.class)
public void findAllModels_invalidRequest_throwNoDataFound() throws Exception {
when(responseBuilder.findAll(any())).thenReturn(null);
mockMvc
.perform(get("/models"))
.andExpect(status().isInternalServerError());
}
}
Контроллер
@GetMapping("/models")
public ResponseEntity<List<Model>> findAllModels() {
//Some Logic
dataExistenceCheck(response);
return new ResponseEntity<>(response, HttpStatus.OK);
}
private <T> void dataExistenceCheck(T target) {
if (target == null || (target instanceof Collection && ((Collection<?>) target).isEmpty())) {
throw new NoDataFoundException();
}
}
NoDataFoundException Class
public class NoDataFoundException extends RuntimeException {
private static final long serialVersionUID = 140836818081224458L;
public NoDataFoundException() {
super();
}
public NoDataFoundException(String message) {
super(message);
}
}
Поиск
Я отлаживал коды и отслеживал до класса org.springframework.web.servlet.FrameworkServlet
.Да, я ожидал NoDataFoundException
, но там он выдает NesteServletException
.
Как я могу решить это?Что я сделал не так?
Отредактированный вопрос
У меня @ControllerAdvice
иобрабатывать NoDataFoundException
, но он достигает NestedServletException
, прежде чем достичь здесь.
@ResponseBody
@ResponseStatus(value = HttpStatus.NOT_FOUND)
@ExceptionHandler(NoDataFoundException.class)
public ResponseEntity<ErrorResponse> noDataFoundExceptionHandler(NoDataFoundException exception) {
LOGGER.debug("No data found exception [{}].", exception);
return new ResponseEntity<>(new ErrorResponse("not found"), HttpStatus.NOT_FOUND);
}