相关疑难解决方法(0)

模拟或构建Jersey InboundJaxrsResponse

我是一个相当新的开发球衣客户端,并在一些测试中遇到了一些问题.首先,我可能应该提到我的应用程序是所有客户端,没有服务器端的东西.

我的问题是我想创建一个Response实例的对象InboundJaxrsResponse,到目前为止,我试图通过模拟Response使用Mockito和实现这一点ResponseBuilder.build()

使用Mockito:

Response response = mock(Response.class);
when(response.readEntity(InputStream.class))
    .thenReturn(ClassLoader.getSystemResourceAsStream("example_response.xml");
Run Code Online (Sandbox Code Playgroud)

这工作正常,当我读出响应的实体时,response.readEntity(InputStream.class) 我得到了预期的实体.但是我需要多次从响应中读取实体.为了实现这一点,我response.bufferEntity()在读出实体之前使用.我第一次阅读实体一切正常,但第二次我得到一个异常I/O stream closed......好吧我想出了嘲笑方法bufferEntity,如下所示:

Response response = mock(Response.class);
when(response.bufferEntity()).thenCallRealMethod();
when(response.readEntity(InputStream.class))
    .thenReturn(ClassLoader.getSystemResourceAsStream("example_response.xml");
Run Code Online (Sandbox Code Playgroud)

但这只是导致错误被调用时抛出bufferEntity(),这是因为bufferEntity()Responseabstract.

我的另一个尝试是通过使用ResponseBuilder.build()如下:

ResponseBuilder responseBuilder = Response.accepted(ClassLoader.getSystemResourceAsStream("example_response.xml"));
Response response = responseBuilder.build();
Run Code Online (Sandbox Code Playgroud)

这个声明很好,通过调试我的响应我可以看到它有正确的实体等等.但是这次当我打电话的时候,我response.bufferEntity()得到一个异常抛出,说这个操作是非法的,OutboundJaxrsResponse所以通过这种方式构建响应会导致错误的实例Response.class:

所以最终有三个问题.

  1. 这是否可以模拟/构建此类型的对象进行测试?
  2. 有没有办法模拟入站响应?
  3. 有没有一种办法,而不是创建的实例OutboundJaxrsResponseResponseBuilder.build()创建的实例InboundJaxrsResponse,或至少铸造/实例转换OutboundJaxrsResponse到的实例OutboundJaxrsResponse

java unit-testing jersey jersey-client java-ee-7

10
推荐指数
1
解决办法
4318
查看次数

标签 统计

java ×1

java-ee-7 ×1

jersey ×1

jersey-client ×1

unit-testing ×1