我是一个相当新的开发球衣客户端,并且在一些测试中遇到了一些问题。 首先,我可能应该提到我的应用程序都是客户端,根本没有服务器端。
我的问题是我想创建一个实例Response
的{{1}}对象,到目前为止,我已尝试使用{{1}模拟InboundJaxrsResponse
来实现此目的}和Response
使用Mockito:
Mockito
当我用ResponseBuilder.build()
读出回复的实体时,这很好用
我得到了预期的实体。但是我需要多次从响应中读取实体。为了实现这一点,我在读出实体之前使用了Response response = mock(Response.class);
when(response.readEntity(InputStream.class))
.thenReturn(ClassLoader.getSystemResourceAsStream("example_response.xml");
。我第一次阅读实体一切正常,但第二次我得到异常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");
的{{1}}为bufferEntity()
。
我的另一种尝试是使用bufferEntity()
,如下所示:
Response
这个声明很好,通过调试我的响应我可以看到它有正确的实体等等。但是这次当我调用abstract
时,我得到一个例外,说明该操作对于ResponseBuilder.build()
是非法的,所以通过以这种方式构建响应导致错误的ResponseBuilder responseBuilder = Response.accepted(ClassLoader.getSystemResourceAsStream("example_response.xml"));
Response response = responseBuilder.build();
实例:
所以最终有三个问题。
response.bufferEntity()
OutboundJaxrsResponse
的实例而不是创建Response.class
的实例,或者至少将OutboundJaxrsResponse
的实例转换/转换为ResponseBuilder.build()
的实例?答案 0 :(得分:3)
我这样解决了:
@Spy Response response;
...
// for assignments in code under testing:
doReturn( response ).when( dwConnector ).getResource( anyString() );
// for entity and response status reading:
doReturn( "{a:1}".getBytes() ).when( response ).readEntity( byte[].class );
doReturn( 200 ).when( response ).getStatus();