2012-09-04 2 views
0

Можно создать дубликат:
Unit Testing a static method in a Java Class from Groovy Test caseДразнящий HttpClient в Groovy

Я пытаюсь модульного тестирования класса Java с помощью заводной Helper имеет статический метод в нем, где HttpClient получается и На него вызывается executeMethod. Чтобы тестировать этот класс, я пытаюсь издеваться над этим httpClient.executeMethod() в тестовом примере Groovy, но я не могу издеваться над этим.

Ниже класс 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); 

    } 
} 

Любые идеи о том, как блок тестирования этот статический метод с Groovy? Так как объект httpClient находится внутри метода класса, как я издеваюсь над этим объектом в тестовом примере Groovy?

Это тестовый пример, который у меня есть. Я пытаюсь издеваться пустое значение, но не происходит ...

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

Возможно, [это] (http://thecarlhall.wordpress.com/2010/03/25/unit-testing-with-httpclients-localtestserver/) помогает вам. –

ответ

2

конструкцию, в которой вы вызываете конструктор HttpClient явно внутри статического метода класса Java будет очень трудно дразнить для тестирование. Разумные средства Grails не помогут, потому что они могут только издеваться над вызовами, которые находятся в коде Groovy, а не Java. Если ваш класс-помощник был написан в Groovy, у вас может быть больше удачи.

Лучшим дизайном будет использование службы singleton (или другого компонента Spring) с использованием методов экземпляра, а не статики, и использование какой-либо инъекции зависимостей либо из экземпляра HttpClient, либо из какого-либо фабричного объекта, который возвращает HttpClients , В тесте вы можете заменить эту фабрику макетной.

+0

Спасибо за ответ Ян. Но вышеприведенный код уже находится в производстве и, следовательно, его невозможно изменить. Считаете ли вы, что лучше написать тестовый пример для этого java-класса в java, а не groovy. Если я пишу тестовый пример в Java, не могли бы вы предложить мне какие-либо подходы к издевательскому вызову httpclient? – Npa

+0

Вы все еще можете написать свои тесты в Groovy, но вам нужно использовать чистую Java-mocking-библиотеку, такую ​​как JMockit, а не структуру Groovy-metaclass, которую предоставляет Grails. –

+0

Я могу добавить JMOCKit в проект grails. Не могли бы вы показать мои примеры, где это достигается с помощью JMockit – Npa

Смежные вопросы