Test unitaire jersey Restful Services

Je suis nouveau dans les tests unitaires et je veux tester certains services jersey dans un projet. Nous utilisons Junit. Veuillez me guider pour écrire des cas de test de meilleure façon.

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érera 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 Maillot 1.17.1 version.

L'aide serait appréciée :)

28
demandé sur Unknown 2014-01-28 22:24:11

3 réponses

Pour les tests Jersey web services, il existe plusieurs frameworks de test, à savoir: Jersey Test Framework (déjà mentionné dans une autre réponse - voir ici la documentation pour la version 1.17 ici: https://jersey.java.net/documentation/1.17/test-framework.html ) et rassurez-vous ( 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 repos assuré plus intéressant et puissant, mais Jersey Test Framework est très facile à utiliser aussi. Dans REST-Assured pour écrire un cas 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 obtenir 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.

19
répondu emgsilva 2014-01-29 08:08:29

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 y a une méthode getentity() qui peut être utilisée. L'utilisation d'un framework D'objet fictif comme Mockito pourrait également être utile dans ce cas.

7
répondu Neeraj Krishna 2014-01-28 18:50:27

Connaissez-vous Le Chapitre 26. Cadre 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);
    }
}
2
répondu MariuszS 2018-01-08 17:35:50