使用Spring RestController + ExceptionHandler Annotation使用Mockito模拟ExceptionHandler

时间:2015-06-15 15:37:23

标签: java spring unit-testing spring-mvc junit

我正在尝试JUnit测试Spring @RestController的异常处理。

@RestController
public class MyController {

异常处理在类ErrorHandler中完成。

@ControllerAdvice
public class ErrorHandler extends ResponseEntityExceptionHandler {

我正在使用Mockito,因为它非常方便。但现在我无法弄清楚如何使ErrorHandler与RestController一起工作。

@RunWith(MockitoJUnitRunner.class)
public class MyControllerTest {

   @InjectMocks
   private MyController controller;

   @Mock
   private MyService myService;

   @Spy
   private ErrorHandler errorHandler;

正如你所看到的,我试图用@Spy来制作"真实" ErrorHandler使用已注入模拟的Controller。

但它不会这样。

@Test
public void testDoWork_InternalServiceException() {
    MyRequest request = getDefaultRequest();
    Mockito.when(myService.check(request)).thenThrow(new RuntimeException());       
    ResponseEntity<StatusResponse> response = controller.doWork(request);
}

如果我调用控制器的方法,它当然会抛出异常,并且永远不会调用ErrorHandler类。

有没有办法用Mockito测试@RestController类和其他@ControllerAdvice异常处理程序类的异常处理?

提前感谢你的建议。

0 个答案:

没有答案