2012-09-04 4 views
0

Possible en double:
Unit Testing a static method in a Java Class from Groovy Test caseMocking HttpClient Groovy

Je suis en train de test unitaire une classe java en utilisant groovy Le Helper a une méthode statique là où un HttpClient est obtenu et executeMethod est appelée. Pour tester cette classe, j'essaye de me moquer de ce httpClient.executeMethod() dans un cas de test Groovy, mais je ne suis pas capable de me moquer de ce droit.

Voici la classe Java

public class Helper{ 

    public static message(final String serviceUrl){ 

     HttpClient httpclient = new HttpClient(); 
     HttpMethod httpmethod = new HttpMethod(); 

     // the below is the line that iam trying to mock 
     String code = httpClient.executeMethod(method); 

    } 
} 

Toutes les idées sur la façon de tester cette unité de méthode statique de Groovy? Étant donné que l'objet httpClient est dans la méthode de classe, comment puis-je simuler cet objet dans un scénario de test Groovy?

Ceci est le cas de test que j'ai jusqu'à présent. Je suis en train de se moquer de null, mais ne se produit pas ...

void testSendMessage(){ 
    def serviceUrl = properties.getProperty("ITEM").toString() 

    // mocking to return null 
    def mockJobServiceFactory = new MockFor(HttpClient) 
    mockJobServiceFactory.demand.executeMethod{ HttpMethod str -> 
     return null 
    } 

    mockJobServiceFactory.use {   
     def responseXml = helper.message(serviceUrl) 

    } 
} 
+0

Peut-être que [this] (http://thecarlhall.wordpress.com/2010/03/25/unit-testing-with-httpclients-localtestserver/) vous aide. –

Répondre

2

Une conception où vous appelez le constructeur HttpClient explicitement à partir d'une méthode statique d'une classe Java va être très difficile de se moquer de essai. Les installations de moquerie de Grails n'aideront pas parce qu'elles peuvent seulement se moquer des appels qui sont dans le code de Groovy, pas Java. Si votre classe d'aide a été écrite en Groovy, vous pourriez avoir plus de chance. Une meilleure conception consisterait à utiliser un service singleton (ou un autre bean Spring) avec des méthodes d'instance plutôt que statiques, et utiliser une sorte d'injection de dépendance, soit d'une instance HttpClient, soit d'un objet factory retournant HttpClients . Dans le test, vous pouvez ensuite remplacer cette usine avec un simulacre.

+0

Merci pour la réponse Ian. Mais le code ci-dessus est déjà en production et donc pas possible de changer. Pensez-vous que c'est une meilleure idée d'écrire le cas de test pour cette classe java dans Java, plutôt que groovy. Si j'écris le scénario de test en Java, pourriez-vous me suggérer des méthodes pour se moquer de l'appel httpclient? – Npa

+0

Vous pouvez toujours écrire vos tests dans Groovy mais vous aurez besoin d'utiliser une pure bibliothèque Java moqueuse telle que JMockit plutôt que le framework basé sur Groovy-Metaclass fourni par Grails. –

+0

Je peux ajouter JMOCKit à mon projet grails. Pourriez-vous s'il vous plaît montrer quelques exemples où cela est réalisé en utilisant JMockit – Npa