我正在使用EMMA eclipse插件生成代码覆盖率报告。 我的应用程序是RESTFul Web服务。 编写Junits,以便为Web服务创建客户端,并使用各种输入调用。
然而,EMMA显示源文件夹的0%覆盖率。仅包含测试文件夹。
使用main方法启动应用程序服务器(jetty服务器)。
报告:
Element Coverage Covered Instructions Total Instructions
MyRestFulService 13.6% 900 11846
src 0.5% 49 10412
test 98% 1021 1434
Junit测试方法:
@Test
public final void testAddFlow() throws Exception {
Client c = Client.create();
WebResource webResource = c.resource(BASE_URI);
// Sample files for Add
String xhtmlDocument = null;
Iterator iter = mapOfAddFiles.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry pairs = (Map.Entry) iter.next();
try {
document = helper.readFile(requestPath
+ pairs.getKey());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/* POST */
MultiPart multiPart = new MultiPart();
multiPart.bodyPart(....
...........
ClientResponse response = webResource.path("/add").type(
MEDIATYPE_MULTIPART_MIXED).post(ClientResponse.class,
multiPart);
assertEquals("TESTING ADD FOR >>>>>>> " + pairs.getKey(),
Status.OK, response.getClientResponseStatus());
}
}
}
调用服务方法:
@POST
@Path("add")
@Consumes("multipart/mixed")
public Response add(MultiPart multiPart)
throws Exception {
Status status = null;
List<BodyPart> bodyParts = null;
bodyParts = multiPart.getBodyParts();
status = //call to business layer
return Response.ok(status).build();
}
答案 0 :(得分:1)
Emma提供了另一种执行离线检测的解决方案。 这有助于我解决这个问题。
答案 1 :(得分:0)
如果通过http调用调用服务,则不会涵盖服务代码。 但是,通过传递输入直接调用Web服务/业务层方法是唯一的解决方案。 这也是任何Web应用程序的方式。我们将直接模拟业务层。
我利用此解决方案为我的Junits获取代码覆盖率。