Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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
如何在JUint中创建javax.ws.rs.core.Response?_Java_Junit_Jax Rs_Httpresponse - Fatal编程技术网

如何在JUint中创建javax.ws.rs.core.Response?

如何在JUint中创建javax.ws.rs.core.Response?,java,junit,jax-rs,httpresponse,Java,Junit,Jax Rs,Httpresponse,我正在尝试使用JUnit4测试一个实用方法,它将javax.ws.rs.core.Response作为输入参数。该方法查看响应属性,并根据响应代码采取一些操作。当我在测试方法中创建响应并使用以下方式提交时: Response resp = Response.status(Status.INTERNAL_SERVER_ERROR).entity(respMessage).build(); ResponseParser.parseResponse(resp); 我的实用方法抛出: java.lan

我正在尝试使用JUnit4测试一个实用方法,它将javax.ws.rs.core.Response作为输入参数。该方法查看响应属性,并根据响应代码采取一些操作。当我在测试方法中创建响应并使用以下方式提交时:

Response resp = Response.status(Status.INTERNAL_SERVER_ERROR).entity(respMessage).build();
ResponseParser.parseResponse(resp);
我的实用方法抛出:

java.lang.IllegalStateException: RESTEASY003290: Entity is not backed by an input stream
    at org.jboss.resteasy.specimpl.BuiltResponse.readEntity(BuiltResponse.java:231)
    at org.jboss.resteasy.specimpl.BuiltResponse.readEntity(BuiltResponse.java:218)
我的util类基本上是:

import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status.Family;

public class ResponseParser {

  public static void parseResponse(Response response) {
    String errorResp = "";
    if (!response.getStatusInfo().getFamily().equals(Family.SUCCESSFUL)) {
      int errorCode = response.getStatus();

      errorResp = response.readEntity(String.class);

    }
  }
}

我如何创建一个响应,该响应将按照resteasy的预期由流正确支持?我看了很多类似的问题,但它们大多集中在测试或模拟端点调用上。我只想测试我的解析方法。

用一些单元测试框架模拟响应,比如Mockito。然后,您将能够声明在每次响应方法调用时返回的内容,甚至可以检查是否调用了某个方法。

我最终确实执行了@albert_nil建议的操作。下面是我的测试类中的相关代码。MessageParseUtil.parseReportResponse(mockResponse);是正在测试的实用方法

  @Test
  public void parse_Report_Response_400_Test() {
    String respMessage = "400 : Validation error occurred. Invalid Parm: employeeID";
    Response mockResponse = buildMockResponse(Status.INTERNAL_SERVER_ERROR, respMessage);

    try {
      MessageParseUtil.parseReportResponse(mockResponse);

      fail("Expected parseReportResponse() to throw error but none thrown.");

    } catch (RestClientException e) {
      Assert.assertEquals("Expected to status code to be 400 but was " + e.getStatusCode() + " instead.", 400, e.getStatusCode());
      Assert.assertEquals("The error message was missing or not correct.", respMessage, e.getErrorMessage().getErrorMessageList().get(0));
    }
  }

  private Response buildMockResponse(Status status, String msgEntity) {
    Response mockResponse = mock(Response.class);
    Mockito.when(mockResponse.readEntity(String.class)).thenReturn(msgEntity);
    Mockito.when(mockResponse.getStatus()).thenReturn(status.getStatusCode());
    Mockito.when(mockResponse.getStatusInfo()).thenReturn(status);

    return mockResponse;
  }

关于我如何实现模拟的代码示例,请参见下面的答案。