【发布时间】:2020-10-14 23:01:29
【问题描述】:
我正在测试一个 micronaut 控制器。控制器代码如下:
@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时,Controller确实捕获了它,并运行到返回语句:
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)
知道为什么吗?
【问题讨论】:
-
你能显示
formControllerClient指向的类型的源代码吗? -
你能在你的单元测试中展示你的模拟链和你的控制器的完整代码吗?
标签: java unit-testing micronaut