web-dev-qa-db-fra.com

Maillot de test unitaire Restful Services

Je suis nouveau dans les tests unitaires et je veux tester certains services de maillot dans un projet. Nous utilisons Junit. Veuillez me guider pour mieux écrire les cas de test.

CODE:

    @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);
    }

Le service mentionné ci-dessus fonctionne bien et je veux écrire un cas de test junit pour tester la méthode mentionnée ci-dessus. La méthode ci-dessus récupère la liste des produits (List<Product>) au format JSON. Je voudrais écrire un cas de test pour vérifier l'état de la réponse et le format json.

REMARQUE: Nous utilisons la version Jersey 1.17.1.

De l'aide serait appréciée :)

28
Unknown

Pour les tests de services Web Jersey, il existe plusieurs cadres de test, à savoir: Jersey Test Framework (déjà mentionné dans une autre réponse - voir ici la documentation de la version 1.17 ici: https://jersey.Java.net/documentation/1.17/test -framework.html ) et REST-Assured ( https://code.google.com/p/rest-assured ) - voir ici une comparaison/configuration des deux ( http://www.hascode.com/2011/09/rest-assured-vs-jersey-test-framework-testing-your-restful-web-services/ ).

Je trouve le REST-Assured plus intéressant et plus puissant, mais Jersey Test Framework est également très facile à utiliser. Dans REST-Assured pour écrire un scénario de test "pour vérifier l'état de la réponse et le format json", vous pouvez écrire le test suivant (tout comme vous le faites dans 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");
    }

}

Cela devrait faire l'affaire pour vous ... vous pouvez également vérifier les éléments spécifiques JSON très facilement et de nombreux autres détails. Pour des instructions sur plus de fonctionnalités, vous pouvez consulter le très bon guide de REST-Assured ( https://code.google.com/p/rest-assured/wiki/Usage ). Un autre bon tutoriel est celui-ci http://www.hascode.com/2011/10/testing-restful-web-services-made-easy-using-the-rest-assured-framework/ .

HTH.

17
emgsilva

Ignorez simplement les annotations et écrivez un test unitaire normal qui passe les paramètres requis. Le retour que je pensais serait généralement de type "javax.ws.rs.core.Response" ... Il existe une méthode getEntity () qui peut être utilisée. L'utilisation d'un cadre d'objet Mock comme Mockito pourrait également être utile dans ce cas.

8
Neeraj Krishna

Connaissez-vous Chapitre 26. Framework de test Jersey ?

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);
    }
}
3
MariuszS