我正在为我的dropwizard资源进行单元测试(由模拟支持)。我最近添加了一些响应标头和不同的状态代码,并想测试它们。
不幸的是,我在他们的文档中找不到一个例子,他们同时获得实体并检查响应。
我正在测试的方法流回一个文件。方法本身定义为:
@GET
@Path("/{assetId}")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@PermitAll
public Response download(@Auth User user,
@PathParam("assetId") String assetId,
@HeaderParam("Range") String rangeHeader) {
为了验证下载,我最初是通过我的测试提出的请求:
final InputStream responseStream = resource.client()
.target("/assets/123")
.request()
.get(InputStream.class);
然后我可以将流写入文件并验证它是从资源返回的文件。工作得很好。 (这里,“资源”是dropwizard的ResourceTestRule。)
但是,如上所述,我现在想要了解响应本身。有漂浮的示例使用Jersey的ClientResponse,但这不起作用。我试过了:
final ClientResponse response = resource.client()
.target("/assets/123")
.request()
.get(ClientResponse.class);
然而,最终会出现例外情况:
javax.ws.rs.client.ResponseProcessingException: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/octet-stream, type=class org.glassfish.jersey.client.ClientResponse, genericType=class org.glassfish.jersey.client.ClientResponse.
at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:811)
at org.glassfish.jersey.client.JerseyInvocation.access$700(JerseyInvocation.java:92)
at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:701)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
......我不知道该怎么做。有什么帮助吗?
由于
答案 0 :(得分:0)
final Response response = resource.client()
.target("/assets/123")
.request()
.get();
InputStream responseStream = (InputStream) response.getEntity();