2009-05-26 10 views
7

Ho un servizio web JAX-RS implementato con la libreria di Restlet e ora voglio testarlo. Per fare questo mi piacerebbe ospitare questo servizio nel mio test pre-inizializzandolo con servizi derisi.Qual è il modo migliore per scrivere un test case per i servizi web RESTLET?

Qual è il modo migliore per ospitare tale servizio ed eseguire le chiamate di prova?

@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? 
} 

risposta

0

Restlet consente di eseguire i propri servizi web su vari server "connettori", ed è abbastanza facile passare da un server all'altro. Normalmente eseguiamo i nostri servizi Web su un cluster di server di applicazioni Java EE Sun Glassfish, ma per testarli utilizziamo un connettore che si collega a Simple HTTP Server per eseguire i servizi Web come applicazione autonoma. Ci sono anche connettori server per AsyncWeb, Jetty, Grizzly e un server HTTP interno.

Sul lato client, è necessario considerare la libreria client di Restlet. È abbastanza conciso ed è progettato per adattarsi bene ai server di Restlet. Utilizziamo il connettore client HTTP Apache.

Per il test, abbiamo creato la classe Fetcher. Questo è implementato usando l'API del client di Restlet. Per utilizzarlo, è praticamente chiama il metodo fetch():

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

Fetch() virate il nome della risorsa sulla base URI dei servizi web (dire "http://localhost:8182"), utilizza il client API Restlet a recupera una rappresentazione XML, quindi deserializza l'XML recuperato in un oggetto di trasferimento dati (un POJO).

Si può vedere che questo rende davvero facile l'unità di test. Prima che l'unit test, si attivano i servizi Web su un server autonomo come Simple o Jetty. Durante i test unitari si prelevano DTO, alberi DOM, oggetti json.org o qualsiasi altra cosa usando Fetcher, quindi si applicano le asserzioni di test a ciò che è stato restituito. Se è necessario eseguire il test a un livello più dettagliato, è possibile utilizzare direttamente il codice del client Restlet.

+1

L'intero punto della mia domanda era di capire come inizializzare un servizio web/componente all'interno del processo. Non voglio/non posso eseguirlo su un server remoto. È necessario inizializzare il servizio con istanze simulate PRIMA che sia esposto come servizio Web. C'è un modo per esporre un ISTANZA di una classe/componente come servizio? – IgorM

+0

eventuali risposte? IgorM: hai lavorato? – Vatsala