2009-05-26 5 views
7

J'ai un service Web JAX-RS implémenté avec la bibliothèque Restlet et maintenant je veux le tester. Pour ce faire, je souhaite héberger ce service dans mon test en le préinitialisant avec des services moqués.Quelle est la meilleure façon d'écrire un scénario de test pour les services Web RESTLET?

Quelle est la meilleure façon d'héberger un tel service et d'exécuter les appels de test?

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

Répondre

0

Restlet vous permet d'exécuter vos services Web sur différents serveurs « connecteurs », et il est assez facile de passer d'un serveur à un autre. Nous exécutons normalement nos services Web sur un cluster de serveurs d'applications Sun Glassfish Java EE, mais pour les tester, nous utilisons un connecteur qui est lié au Simple HTTP Server pour exécuter les services Web en tant qu'application autonome. Il existe également des connecteurs de serveur pour AsyncWeb, Jetty, Grizzly et un serveur HTTP interne. Du côté client, vous devez prendre en compte la bibliothèque client Restlet. C'est assez concis et il est conçu pour bien s'harmoniser avec les serveurs Restlet. Nous utilisons le connecteur Apache HTTP Client.

Pour tester, nous avons créé la classe Fetcher. Ceci est implémenté à l'aide de l'API client Restlet. Pour l'utiliser, vous avez assez bien appeler la méthode fetch():

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

fetch() Tacks le nom de ressource donnée sur l'URI de base des services Web (dire "http://localhost:8182"), utilise l'API client Restlet à récupère une représentation XML, puis désérialise le XML récupéré dans un objet de transfert de données (un POJO).

Vous pouvez voir que cela facilite vraiment les tests unitaires. Avant les tests unitaires, vous lancez les services Web sur un serveur autonome tel que Simple ou Jetty. Au cours des tests unitaires, vous récupérez des objets DTO, des arborescences DOM, des objets json.org ou autres à l'aide de Fetcher, puis appliquez des assertions de test à ce qui a été retourné. Si vous devez effectuer un test à un niveau plus détaillé, vous pouvez utiliser le code du client Restlet directement.

+1

Le but de ma question était de savoir comment initialiser un service web/composant à l'intérieur du processus. Je ne veux pas/ne peux pas l'exécuter sur un serveur distant. Il est nécessaire d'initialiser le service avec des instances simulées AVANT qu'il ne soit exposé en tant que service Web. Existe-t-il un moyen d'exposer une INSTANCE d'une classe/composant en tant que service? – IgorM

+0

des réponses? IgorM - avez-vous travaillé? – Vatsala

Questions connexes