제 문제는 @ExceptionHandler와 함께 @ControllerAdvice를 사용하는 Spring @RestController 테스트와 관련이 있습니다. 여기 코드는 다음과 같습니다@ControllerAdvice를 사용하여 @RestController를 테스트하십시오.
@ControllerAdvice 클래스 :
@ControllerAdvice
public class MyAppExceptionHandler {
@ExceptionHandler({ NoSuchEntityException.class })
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public @ResponseBody
ErrorDTO handleNotFoundException(Exception ex) throws IOException {
return new ErrorDTO.Builder().setStatus(HttpStatus.NOT_FOUND)
.setCause(ex.getClass().getName())
.setThrowable(ex).build();
}
}
애플리케이션 모두에서 사용 잘 작동 - 완벽 JSON의 설명과 함께 404 응답을 받고 있지만, 때 시험 중에 그것을 사용하려고 - 나쁜 일이 일어날.
내 테스트 클래스 :
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { WebConfig.class })
@WebAppConfiguration
public class SomeTest {
@Mock
private SomeService service;
@InjectMocks
private SomeController controller;
private MockMvc mvc;
private ExceptionHandlerExceptionResolver createExceptionResolver() {
ExceptionHandlerExceptionResolver exceptionResolver = new ExceptionHandlerExceptionResolver() {
@Override
protected ServletInvocableHandlerMethod getExceptionHandlerMethod(
HandlerMethod handlerMethod, Exception exception) {
Method method = new ExceptionHandlerMethodResolver(
MyAppExceptionHandler.class).resolveMethod(exception);
return new ServletInvocableHandlerMethod(
new MyAppExceptionHandler(), method);
}
};
exceptionResolver.afterPropertiesSet();
return exceptionResolver;
}
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mvc = MockMvcBuilders.standaloneSetup(controller)
.setHandlerExceptionResolvers(createExceptionResolver())
.build();
}
@Test
public void thatExceptionHappens() throws Exception {
when(service.get(10)).thenThrow(new NoSuchEntityException(Some.class, 10));
mvc.perform(get("/api/some/10")).andExpect(status().isNotFound());
}
}
을 실행하려고 :
2014-07-15 19:35:01.376 [main] ERROR com.package.SomeTest$1 - Failed to invoke @ExceptionHandler method: public com.package.ErrorDTO com.package.MyAppExceptionHandler.handleNotFoundException(java.lang.Exception) throws java.io.IOException
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
은 아마 MappingJackson2HttpMessageConverter 테스트 광산 @ExceptionHandler 동안로드되지 않는다는 생각은 (그러나 그것은 WebConfig에서 구성됩니다. 어떤 예외도 던지지 않는 전형적인 테스트를 수행하려고 할 때 - 모든 것이 잘 동작합니다.
미리 도움을 주셔서 감사합니다.
WebConfig의 내용은 무엇입니까? – denisazevedo
질문을하고 사람들은 대답 할 시간을 가졌습니다. 답변을 수락하십시오. –