java - 如何在 JUnit 中创建 javax.ws.rs.core.Response?

标签 java junit jax-rs httpresponse

我正在尝试使用 JUnit4 测试一个将 javax.ws.rs.core.Response 作为输入参数的实用方法。该方法查看 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 的预期由流正确支持?我看了很多类似的问题,但它们似乎主要围绕测试或模拟端点调用。我只是想测试一下我的解析方法。

最佳答案

我最终确实按照@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;
  }

关于java - 如何在 JUnit 中创建 javax.ws.rs.core.Response?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45574751/

相关文章:

python - 将试验输出转换为 junit xml

java - Spring 3.0 REST 实现还是 Jersey ?

java - 在批处理文件中包含 jar 文件时出错

java - @Before 函数在 Junit 测试用例中未触发

java - 无法从数据库获取数据-mockito

java - org.glassfish.jersey.containers 的“dependency.dependency.version”:jersey-container-grizzly2-http:jar is missing

java - 带有 KeyCloak 的 Multi-Tenancy Quarkus?

java - OSGi 框架可以同时启动包吗?

java - 用于在 Linux 上访问带有瑞典字符的文件的 Java 代码错误

java - 将 Arraylist<Object> 中的值转换为 byte[]