如何测试javax Response.readEntity(Class<T>类型)?

How test javax Response.readEntity(Class<T> type)?

我们正在使用 javax.ws.rs.core.Response.readEntity(Class 类型)将 JSON 响应解析为 POJO。我想编写测试以确保实体已正确映射到 POJO - 因此如果布尔值 "valid" 在 json 中为真,它在 POJO 中也为真 - 反之亦然。

我不知道该怎么做。有什么想法或提示吗?

测试编组是 jax-rs 服务中不容易用普通 junit 测试进行测试的事情之一。例如,你如何确保你没有忘记注解 @Path@QueryParam,以至于你的 junit 测试调用方法成功,但实际上调用服务失败。

Arquillian 为这些测试提供了解决方案。本质上,Arquillian 支持在 运行 javaee 容器中执行测试。测试设置包括构建您的 war 和部署您的应用程序。这样,您可以测试堆栈的所有元素,并确保所有元素都在一起:编组、请求路由、http 过滤器,...

如果您使用的是 jersey jax-rs 堆栈,您也可以使用 JerseyTest

Arquillian 更完整,因为它支持使用多个容器进行测试(甚至支持 selenium)并且不会将您与 jax-rs 实现联系起来。

I want to write tests to assure that the entity is correctly mapped into the POJO

如果您只想测试 POJO 是否正确映射,并且您使用 Jackson 作为 JSON 提供程序,您可以简单地使用 ObjectMapper 反序列化 JSON.这就是 Dropwizard recommends testing models

final ObjectMapper mapper = new ObjectMapper();
POJO pojo = mapper.readValue(jsonString, POJO.class);
// assertions