2009-05-26 12 views
7

Tengo un servicio web JAX-RS implementado con la biblioteca Restlet y ahora quiero probarlo. Para hacer eso, me gustaría alojar este servicio en mi prueba preinicializando con servicios de burla.¿Cuál es la mejor manera de escribir un caso de prueba para los servicios web RESTLET?

¿Cuál es la mejor manera de alojar un servicio así y ejecutar las llamadas de prueba?

@Path("/srv") 
public class MyService 
{ 
    @GET 
    public void action(@Context UriInfo uri) 
    { ... } 
} 

@Test 
public void myTest() 
{ 
    MyService service = new MyService(); 
    service.setSomething(...); 

    // How do I host it? 

    // How do I call it? 
} 

Respuesta

0

Restlet le permite ejecutar sus servicios web en varios servidores "conectores", y es muy fácil cambiar de un servidor a otro. Normalmente ejecutamos nuestros servicios web en un clúster de servidores de aplicaciones Java EE Sun Glassfish, pero para probarlos usamos un conector que se vincula con el servidor HTTP simple para ejecutar los servicios web como una aplicación independiente. También hay conectores de servidor para AsyncWeb, Jetty, Grizzly y un servidor HTTP interno.

En el lado del cliente, debe considerar la biblioteca del cliente de Restlet. Es bastante conciso y está diseñado para encajar bien con los servidores de Restlet. Usamos el conector Apache HTTP Client.

Para las pruebas, hemos creado la clase Fetcher. Esto se implementa utilizando la API del cliente de Restlet. Para usarlo, se llama a más o menos el método fetch():

DTO person = fetch("/employee/1234"); 
DTO department = fetch("/department/" + person.getDepartment()); 

Fetch() tachuelas el nombre de recurso dado en el URI base de los servicios web (decir "http://localhost:8182"), utiliza la API del cliente Restlet a obtener una representación XML, luego deserializa el XML recuperado en un objeto de transferencia de datos (un POJO).

Puede ver que esto realmente hace que las pruebas unitarias sean bastante sencillas. Antes de que la unidad realice pruebas, enciende los servicios web en un servidor independiente como Simple o Jetty. Durante las pruebas unitarias, se obtienen DTO, árboles DOM, objetos json.org o lo que sea usando Fetcher, luego se aplican afirmaciones de prueba a lo que se devolvió. Si necesita probar en un nivel más detallado, puede usar el código del cliente de Restlet directamente.

+1

El objetivo de mi pregunta fue descubrir cómo inicializar un servicio/componente web DENTRO del proceso. No quiero/no puedo ejecutarlo en un servidor remoto. Es necesario inicializar el servicio con instancias falsificadas ANTES de que se exponga como un servicio web. ¿Hay alguna manera de exponer una INSTANCIA de una clase/componente como un servicio? – IgorM

+0

alguna respuesta? IgorM: ¿lo has resuelto? – Vatsala

Cuestiones relacionadas