我正在尝试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异常处理程序类的异常处理?
提前感谢你的建议。