我正在使用arquillian来测试我的REST端点。以下是我们正在使用的示例终点和测试用例。使用jacoco进行REST调用的代码覆盖范围
REST端点
@Path("/v1/example")
@Produces("application/json")
@Consumes("application/json")
public class HelloWorldResource {
@EJB
HelloWorldRemote helloWorldRemote;
@GET
@Path("/hello")
public Response getSayHello(){
String helloText = helloWorldRemote.sayHello();
final Response response = Response.ok(helloText).build();
return response;
}
public String nonRESTSayHello(){
return "SAY HELLO NONREST";
}
}
TEST CASE:
@RunWith(Arquillian.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class HelloWorldResourceTest {
@Test
@OperateOnDeployment("REST")
public void testGetSayHello() {
System.out.println("testGETSAYHELLO!!!!!");
Client client = ClientBuilder.newClient();
Invocation.Builder builder = client.target(
"http://localhost:8080/CoverageTest/api/v1/example/hello")
.request(MediaType.APPLICATION_JSON_TYPE);
javax.ws.rs.core.Response response = builder.get();
assertEquals(200, response.getStatus());
}
/*
* @Test
* public void testNonRESTSayHello(){
* HelloWorldResource hwr=new HelloWorldResource();
* String str = hwr.nonRESTSayHello();
* assertEquals("SAY HELLO NONREST",str);
* }
*/
}
我REST分离和NONREST元素成单独的拆封档案并将其部署到服务器和测试。问题是我没有获得REST端点的jacoco覆盖率。如果我取消注释testNonRESTSayHello(),它将显示该类的覆盖范围 - 仅针对方法:nonRESTSayHello(),尽管这两个方法都正在执行。不同之处在于其余端点通过Testcase的Invocation.Builder进行访问。
有什么想法?
我已经尝试在jvm上挂钩jacocoagent,但似乎不工作。但我不知道如何用tcp client/server来完成。你能帮我解决这个问题吗? – Tomin
也许[此主题](https://groups.google.com/forum/#!topic/jacoco/LlqoJpuacak)可以帮助你。 –
你能帮我建立像http://www.eclemma.org/jacoco/trunk/doc/examples/java/ExecutionDataClient.java这样的客户端吗?我应该在哪里实现这段代码? – Tomin