0

Groovy では、メソッドからの目的の戻り値を、テストで必要なものに設定できます。PowerMock を使用して通常のメソッドをモックできますか?

例えば

int getYear() {
    return 2013;
}

テストでは、次のようなものを設定できますか:

expect(getYear()).andReturn(2012);

// クラス underTest

class ProxyB {
    public X getDimensions(){
        GetResponseX getResponseX = client.newServiceCall().call().getResponseX();
        int d = getResponseX.getDimensions();
    }
}

getResponseX.getDimensions()21を返す部分をモックしたい。

4

1 に答える 1

1

これは、単純な呼び出しをモックするための基本的なコードです。次のクラスがあるとします。

class Foo{
    int F(){
        return 42;
    }
}

あなたはそれを嘲笑します:

Foo fooMock = EasyMock.createMock(Foo.class);
EasyMock.expect(fooMock.F()).andReturn(41);

チェーン全体をモックする必要があるというあなたの場合の問題

client.newServiceCall().call().getResponseX()

このために、クラスが最初に への参照を取得する方法を変更する必要がある場合がありますclient。EG、コンストラクターまたはセッターメソッドを介して取得します。おおよそ次のようになります。

class ProxyB{
    YourClient client;

    ProxyB(YourClient client){
        this.client = client;
    }

    public X getDimensions(){
        GetResponseX getResponseX = client.newServiceCall().call().getResponseX();
        int d = getResponseX.getDimensions();
    }
}

ここで、単体テストを作成するときに、モックを作成して、YourClientテスト対象のクラスのコンストラクターに渡します。このようにして、メソッド内から返されるものを完全に制御できますProxyB.getDimensions。この時点から、呼び出しチェーンをたどってモックを作成します (はい、モックがたくさんあります)。最終的に、getResponseXローカル変数にはモックが含まれている必要があり、それに期待するものを設定できます。

于 2013-09-24T07:27:49.997 に答える