我如何获得状态代码&测试时,泽西/ dropwizard响应的响应头?

时间:2017-05-09 21:49:01

标签: java unit-testing jersey dropwizard

我正在为我的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)

......我不知道该怎么做。有什么帮助吗?

由于

1 个答案:

答案 0 :(得分:0)

啊,这比我想象的要简单。

    final Response response = resource.client()
        .target("/assets/123")
        .request()
        .get();

    InputStream responseStream = (InputStream) response.getEntity();