2014-01-28 4 views
25

Я новичок в модульном тестировании, и я хочу проверить некоторые трикотажные услуги в проекте. Мы используем Junit. Пожалуйста, посоветуйте мне лучше написать тестовые примеры.Единичное тестирование джерси Restful Services

КОД:

@GET 
    @Path("/getProducts/{companyID}/{companyName}/{date}") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Object getProducts(@PathParam("companyID") final int companyID, 
      @PathParam("date") final String date, @PathParam("companyName") final String companyName) 
      throws IOException { 
     return productService.getProducts(companyID, companyName, date); 
    } 

Вышеупомянутый сервис работает нормально, и я хочу, чтобы написать тест JUnit случае для проверки упомянутого выше метода. Вышеуказанный метод будет получать список продуктов (List<Product>) в формате JSON. Я хотел бы написать тестовый пример, чтобы проверить статус ответа и формат json.

ПРИМЕЧАНИЕ: Мы используем версию Джерси 1.17.1.

Помощь будет оценена :)

ответ

17

Для тестирования веб-сервисов Джерси Есть несколько рамок тестирования, а именно: Jersey Framework Test (уже упоминалось в другой ответ - смотрите здесь документацию для версии 1.17 здесь: https://jersey.java.net/documentation/1.17/test-framework.html) и REST-Гарантированный (https://code.google.com/p/rest-assured) - смотрите здесь сравнение/настройка обоих (http://www.hascode.com/2011/09/rest-assured-vs-jersey-test-framework-testing-your-restful-web-services/).

Я считаю, что REST-Assured более интересен и эффективен, но тестовая платформа Jersey очень проста в использовании. В REST-Гарантированный, чтобы написать тест «для проверки состояния ответа и формат JSON» вы можете написать следующий тест (очень, как вы делаете в JUnit):

package com.example.rest; 

import static com.jayway.restassured.RestAssured.expect; 
import groovyx.net.http.ContentType; 

import org.junit.Before; 
import org.junit.Test; 

import com.jayway.restassured.RestAssured; 

public class Products{ 

    @Before 
    public void setUp(){ 
     RestAssured.basePath = "http://localhost:8080"; 
    } 

    @Test 
    public void testGetProducts(){ 
     expect().statusCode(200).contentType(ContentType.JSON).when() 
       .get("/getProducts/companyid/companyname/12345088723"); 
    } 

} 

Это должно сделать трюк для вас .. . Вы также можете проверить отдельные элементы JSON очень легко и много других деталей. Инструкции по дополнительным функциям вы можете проверить очень хорошее руководство от REST-Assured (https://code.google.com/p/rest-assured/wiki/Usage). Еще один хороший учебник - это http://www.hascode.com/2011/10/testing-restful-web-services-made-easy-using-the-rest-assured-framework/.

HTH.

+4

Как это единичный тест, если вы указываете на локальный сервер? –

+0

Это всего лишь пример ... вы можете указать адрес конечной точки API, который вам нужен. – emgsilva

+3

Это не единичный тест – MariuszS

6

Просто игнорировать аннотации и написать нормальный модульный тест, который проходит необходимые параметры. Возврат, который, как я думал, обычно имеет тип «javax.ws.rs.core.Response» ... Существует метод getEntity(), который можно использовать. Использование среды Mock-объекта, такой как Mockito, может быть полезным и в этом случае.

+0

@Neeraj .. Спасибо за ваш ответ. Не могли бы вы поделиться образцом, если у вас есть? – Unknown

+7

Хотя вы легко получаете 100% -ный охват этим методом, вы обычно получаете мало знаний о своем программном обеспечении. Это чистый единичный тест, который имеет свою ценность, но вы можете протестировать, по крайней мере, некоторую интеграцию, например, разбор URL-адресов и сортировку данных. –

2

Вы знакомы с Chapter 26. Jersey Test Framework?

public class SimpleTest extends JerseyTest { 

    @Path("hello") 
    public static class HelloResource { 
     @GET 
     public String getHello() { 
      return "Hello World!"; 
     } 
    } 

    @Override 
    protected Application configure() { 
     return new ResourceConfig(HelloResource.class); 
    } 

    @Test 
    public void test() { 
     final String hello = target("hello").request().get(String.class); 
     assertEquals("Hello World!", hello); 
    } 
} 
+2

@Mariuszs .. Спасибо за ваш ответ bro. Но мы используем версию jersey 1.17.1, которая не поддерживает Application и ResourceConfig. Не могли бы вы поделиться примером 1.17.1, если у вас есть? – Unknown

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