我们必须用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
。