将java.ws.rs.core.Response转换为JSON进行jUnit测试



我们必须用jUnit测试我们的JavaEEServer。出于这个原因,我们想要测试我们的REST-get方法。我们使用Jersey框架实现了这些方法。因此,方法返回的响应类型为:java.ws.rs.core.Response.

当我们想从服务器端测试这些响应,所以只想直接调用这些方法时,我们如何将这些响应转换为JSON?

示例:

@GET
@Path("getallemployees")
@Produces("application/json")
public Response getAllEmployees() {
    //here we create a generic entity (this works)
    return Response.ok(entity).build();
}

我们需要的测试:

@Test
public void testgetAllEmployees() {
    // here we initialize the mocked database content (Mockito)
    Response test = employeeResource.getAllEmployees();
    // here we want to have the Response as JSON
}

谢谢!

看起来您正在尝试混合单元测试和集成测试,而您应该选择一个。

如果您对特定的资源实现感兴趣,您应该使用单元测试,因此不关心JSON输出。只需模拟资源依赖关系,调用getAllEmployees()并确认期望值。

然而,如果您对服务输出感兴趣,那么您可能应该启动集成系统(可能使用Jetty作为独立容器,如果需要,可以使用内存数据库),并使用Jersey Client:测试响应

Client client = ClientBuilder.newClient();
WebTarget webTarget = client.target("http://example.com/rest").path("getallemployees");
String rawResponseBody = webTarget.request(MediaType.APPLICATION_JSON).get(String.class);

根据我的经验,很少使用原始响应。您可能会使用实体类而不是String

相关内容

  • 没有找到相关文章

最新更新