Pruebas unitarias jersey Restful Services


Soy nuevo en las pruebas unitarias y quiero probar algunos servicios de jersey en un proyecto. Estamos usando Junit. Por favor guíame a escribir casos de prueba de mejor manera.

CÓDIGO:

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

El servicio mencionado anteriormente está funcionando bien y quiero escribir el caso de prueba junit para probar el método mencionado anteriormente. El método anterior recuperará la lista de productos (List<Product>) en formato JSON. Me gustaría escribir un caso de prueba para verificar el estado de la respuesta y el formato json.

NOTA: Estamos utilizando Versión Jersey 1.17.1.

La ayuda sería apreciada:)

Author: Unknown, 2014-01-28

3 answers

Para las pruebas de servicios web de Jersey hay varios marcos de prueba, a saber: Jersey Test Framework (ya mencionado en otra respuesta-ver aquí la documentación para la versión 1.17 aquí: https://jersey.java.net/documentation/1.17/test-framework.html ) y DESCANSO Asegurado ( https://code.google.com/p/rest-assured ) - vea aquí una comparación / configuración de ambos (http://www.hascode.com/2011/09/rest-assured-vs-jersey-test-framework-testing-your-restful-web-services/).

Encuentro que el RESTO asegurado es más interesante y poderoso, pero Jersey Test Framework también es muy fácil de usar. En REST-Assured para escribir un caso de prueba "para verificar el estado de la respuesta y el formato json", podría escribir la siguiente prueba (muy similar a lo que hace en 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");
    }

}

Esto debería hacer el truco para usted... puede verificar elementos específicos de JSON también muy fácilmente y muchos otros detalles. Para obtener instrucciones sobre más características, puede consultar la guía muy buena de REST-Assured (https://code.google.com/p/rest-assured/wiki/Usage ). Otro buen tutorial es este http://www.hascode.com/2011/10/testing-restful-web-services-made-easy-using-the-rest-assured-framework/.

HTH.

 19
Author: emgsilva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-29 08:08:29

Simplemente ignore las anotaciones y escriba una prueba unitaria normal que pase los parámetros requeridos. El regreso pensé que sería por lo general de tipo "javax.ws.rs.núcleo.Respuesta" ... Hay un método getEntity () que se puede usar. Usar un framework de objetos simulados como Mockito también podría ser útil en este caso.

 7
Author: Neeraj Krishna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-28 18:50:27

¿Está familiarizado con Capítulo 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
Author: MariuszS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-08 17:35:50