Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单元测试中未捕获控制器中的Micronaut返回HttpResponse.serverError_Java_Unit Testing_Micronaut - Fatal编程技术网

Java 单元测试中未捕获控制器中的Micronaut返回HttpResponse.serverError

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 (

我正在测试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时,控制器确实捕获了它,并运行到返回语句:

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
指向的类型的源代码?能否在单元测试中显示模拟链以及控制器的完整代码?