Java 单元测试中未捕获控制器中的Micronaut返回HttpResponse.serverError
我正在测试micronaut控制器。控制器代码如下所示:Java 单元测试中未捕获控制器中的Micronaut返回HttpResponse.serverError,java,unit-testing,micronaut,Java,Unit Testing,Micronaut,我正在测试micronaut控制器。控制器代码如下所示: @Get("/") HttpResponse<String> getData(String crsNumber ) { try { final HttpResponse response = formDataService.getData(crsNumber); return response; } catch (
@Get("/")
HttpResponse<String> getData(String crsNumber ) {
try {
final HttpResponse response = formDataService.getData(crsNumber);
return response;
} catch (HttpClientException e) {
return HttpResponse.serverError(e.getMessage());
}
}
when(formDataService.getData(anyString())).thenThrow(new HttpClientException("FormService Internal Error!"));
final HttpResponse rs = formControllerClient.getData("test");
Assertions.assertEquals(HttpStatus.SERVICE_UNAVAILABLE, rs.getStatus());
抛出HttpClientException时,控制器确实捕获了它,并运行到返回语句:
return HttpResponse.serverError(e.getMessage());
但是在单元测试中
Assertions.assertEquals(HttpStatus.SERVICE_UNAVAILABLE, rs.getStatus());
从未达到,因为它抛出
Internal Server Error
io.micronaut.http.client.exceptions.HttpClientResponseException: Internal Server Error
at io.micronaut.http.client.netty.DefaultHttpClient$11.channelRead0(DefaultHttpClient.java:2046)
at io.micronaut.http.client.netty.DefaultHttpClient$11.channelRead0(DefaultHttpClient.java:1964)
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.micronaut.http.netty.stream.HttpStreamsHandler.channelRead(HttpStreamsHandler.java:190)
at io.micronaut.http.netty.stream.HttpStreamsClientHandler.channelRead(HttpStreamsClientHandler.java:185)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
知道原因吗?在这里发现了问题:如果返回的错误代码超过400,Micronaut将抛出HttpClientResponseException 单元测试的完整代码如下:
@Test
public void callServiceErrorTest() throws InvalidKeySpecException, NoSuchAlgorithmException, JOSEException {
when(formDataService.getData(anyString())).thenThrow(new HttpClientException("FormService Internal Error!"));
final HttpClientResponseException exception = Assertions.assertThrows(HttpClientResponseException.class, () -> {
formControllerClient.getData(jwtString);
});
Assertions.assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, exception.getStatus());
}
能否显示
formControllerClient
指向的类型的源代码?能否在单元测试中显示模拟链以及控制器的完整代码?