2015-06-05 3 views
2

Я использую arquillian для проверки конечной точки REST. Вот примерная конечная точка и тестовый пример, который мы используем.Покрытие кода для вызовов REST с использованием jacoco

ОСТАЛЬНЫХ ENDPOINT

@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 СЛУЧАЙ:

@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 элементов в отдельные Shrinkwrap архивов и развернуть его на сервер и тестирование. Проблема в том, что я не получаю покрытие jacoco для конечных точек REST. Если я раскомментирую testNonRESTSayHello(), он покажет покрытие для класса - только для метода: nonRESTSayHello(), хотя оба метода выполняются. Разница заключается в том, что остальная конечная точка передается с помощью Invocation.Builder из тестовой системы.

Любая идея?

ответ

0

Пока вы можете провести тестирование покрытия с помощью Jacoco во время тестирования «черного ящика» (см. this page on how to use a java agent with tcp client/server), мне интересно, почему вы должны это делать. Я имею в виду, что тестирование службы отдыха в стиле «черного ящика» - это всего лишь способ проверки остальной структуры, которую вы используете вместе с вашим кодом. В этом сценарии я обычно использую mocks и тестирую остальные службы как простые методы, так как таким образом тесты (на мой взгляд) намного легче читать, поддерживать и (не в последнюю очередь) быстрее запускать. Edit, чтобы добавить пример:

@RunWith(Arquillian.class) 
public class HelloWorldResourceTest { 

    @EJB 
    HelloWorldResource helloService; 

    @Test 
    public void testGetSayHello() { 
     Response response = helloService.getSayHello(); 
     assertEquals(200, response.getStatus()); 
    } 

} 
+0

Я уже пытался зацепить jacocoagent в JVM, но не похоже на работу. Но я не знаю, как это сделать с помощью tcp client/server. не могли бы вы мне помочь? – Tomin

+0

Возможно, [эта тема] (https://groups.google.com/forum/#!topic/jacoco/LlqoJpuacak) может вам помочь. –

+0

Не могли бы вы помочь мне настроить клиента, как в http://www.eclemma.org/jacoco/trunk/doc/examples/java/ExecutionDataClient.java. Где я должен реализовать этот фрагмент кода? – Tomin

Смежные вопросы