0

重複の可能性:
Groovy テスト ケースからの Java クラスの静的メソッドの単体テスト

groovy を使用して Java クラスを単体テストしようとしています。そこには、取得されて呼び出されるHelper静的メソッドがあります。このクラスを単体テストするために、Groovy テスト ケースでこれをモックしようとしていますが、正しくモックできません。HttpClientexecuteMethodhttpClient.executeMethod()

以下は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 テスト ケースでこのオブジェクトをモックするにはどうすればよいですか?

これは私がこれまでに持っているテストケースです。私はnullにモックしようとしていますが、起こっていません...

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)

    }   
}
4

1 に答える 1

2

Java クラスの静的メソッド内から HttpClient コンストラクターを明示的に呼び出す設計は、テスト用にモックするのが非常に難しくなります。Grails のモック機能は、Java ではなく、Groovy コード内の呼び出しのみをモックできるため、役に立ちません。ヘルパー クラスが Groovy で作成されている場合は、もっとうまくいくかもしれません。

より良い設計は、静的ではなくインスタンス メソッドでシングルトン サービス (ま​​たは他の Spring Bean) を使用し、HttpClient インスタンスまたは HttpClients を返す何らかの種類のファクトリ オブジェクトのいずれかの依存性注入を使用することです。テストでは、このファクトリをモック ファクトリに置き換えることができます。

于 2012-09-04T18:19:58.423 に答える