Web services EclEmma JAVA代码覆盖率-无法覆盖RESTful Web服务的服务层

Web services EclEmma JAVA代码覆盖率-无法覆盖RESTful Web服务的服务层,web-services,client,rest,code-coverage,Web Services,Client,Rest,Code Coverage,我正在使用EmmaEclipse插件生成代码覆盖率报告。 我的应用程序是一个RESTFul Web服务。 JUnit的编写方式是为webservice创建一个客户端,并使用各种输入调用它 但是,EMMA显示源文件夹的覆盖率为0%。仅涉及测试文件夹 应用服务器(jetty服务器)是使用main方法启动的 报告: Element Coverage Covered Instructions Total Instructions MyRestFulService 13.6

我正在使用EmmaEclipse插件生成代码覆盖率报告。 我的应用程序是一个RESTFul Web服务。 JUnit的编写方式是为webservice创建一个客户端,并使用各种输入调用它

但是,EMMA显示源文件夹的覆盖率为0%。仅涉及测试文件夹

应用服务器(jetty服务器)是使用main方法启动的

报告:

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();
  }
@POST
@路径(“添加”)
@消耗(“多部分/混合”)
公共响应添加(多部分多部分)
抛出异常{
状态=空;
列出bodyParts=null;
bodyParts=multiPart.getBodyParts();
status=//对业务层的调用
返回Response.ok(status.build();
}

如果通过http调用调用服务,则服务代码将不包括在内。 然而,通过传递输入直接调用webservice/业务层方法是唯一的解决方案。 这也是任何web应用程序的方式。我们将直接模拟业务层


我利用这个解决方案为我的Junits获取代码覆盖率。

Emma提供了另一个执行离线检测的解决方案。 这帮助我解决了这个问题