title: Testing @RestController with @ControllerAdvice
body: <p>My problem is connected with testing Spring @RestController which is also using @ControllerAdvice with @ExceptionHandler. Here is the code:</p>
  
  <p>@ControllerAdvice class:</p>
  
  <pre><code>@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();
      }
  }
  </code></pre>
  
  <p>When using it in application everything works fine - perfectly getting 404 response with JSON explanation, but when trying to use it during tests - bad things happen.</p>
  
  <p>My test class: </p>
  
  <pre><code>@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());
      }
  }
  </code></pre>
  
  <p>When trying to run it:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>I think that probably MappingJackson2HttpMessageConverter is not being loaded during testing mine @ExceptionHandler (however it is configured in WebConfig.class and when trying to perform typical test - one not throwing any exception - everything works fine).</p>
  
  <p>Thanks in advance for your help.</p>