2012-09-04 5 views
0

가능한 중복 :
Unit Testing a static method in a Java Class from Groovy Test case도발 HttpClient를 그루비에서

내가 사용하는 단위 테스트에 자바 클래스를 시도하고 그루비 Helper이있는 HttpClient을 얻을 수 거기에 정적 방법 executeMethod이 호출됩니다. 이 클래스를 단위 테스트하려면이 httpClient.executeMethod()을 Groovy 테스트 케이스에서 조롱하려고 노력하고 있지만 올바르게 조롱 할 수는 없습니다.

다음은 자바 클래스는 어떻게 단위 테스트를 그루비에서이 정적 메서드에

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); 

    } 
} 

어떤 아이디어인가? httpClient 객체가 클래스 메소드 안에 있기 때문에 Groovy 테스트 케이스에서이 객체를 어떻게 조롱합니까?

이것은 지금까지 테스트 케이스입니다. 당신이 조롱하기가 매우 어려울 것입니다 자바 클래스의 정적 메소드 내에서 명시 적으로 HttpClient를 생성자를 호출하고 어디

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

[this] (http://thecarlhall.wordpress.com/2010/03/25/unit-testing-with-httpclients-localtestserver/)가 도움이 될 수 있습니다. –

답변

2

... 디자인을 null로 조롱하려고하지만, 일이 아냐 테스트. Grails 조롱 기능은 Java가 아닌 Groovy 코드 내에있는 호출 만 모의 할 수 있기 때문에 도움이되지 않습니다. 헬퍼 클래스가 Groovy로 작성 되었다면 더 많은 행운을 누릴 수 있습니다.

더 나은 디자인은 정적이 아닌 인스턴스 메서드로 싱글 톤 서비스 (또는 다른 스프링 빈)를 사용하고 HttpClient 인스턴스 또는 HttpClient를 반환하는 일종의 종류의 종속성 주입을 사용하는 것이 좋습니다 . 테스트에서이 팩토리를 모의 모델로 대체 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 위의 코드는 이미 제작 중이므로 변경할 수 없습니다. groovy가 아닌 java에이 java 클래스의 테스트 케이스를 작성하는 것이 더 좋은 생각이라고 생각하십니까? Java로 테스트 케이스를 작성한다면, httpclient 호출을 조롱하는 방법을 제안 해 주시겠습니까? – Npa

+0

당신은 여전히 ​​Groovy에서 테스트를 작성할 수 있지만 Grails가 제공하는 Groovy-metaclass 기반 프레임 워크가 아닌 JMockit과 같은 순수 Java mocking 라이브러리를 사용해야합니다. –

+0

JMOCKit을 grails 프로젝트에 추가 할 수 있습니다. 이것이 JMockit을 사용하여 실현되고있는 몇 가지 예를 보여 주시겠습니까? – Npa

관련 문제