0

私はgroovyを使用して、テストケースのモッククラスをいくつか作成しています。私は基本的に、テストケースを実行できるように、すべてのメソッドがnullを返すダミーオブジェクトを作成しています。

私は次の構文を使用しています:

MessageFactory.instance = ["getMessage": {a,b,c,d -> "dummy"}] as MessageFactory

したがって、ここでは、シングルトンインスタンスを偽のファクトリオブジェクトで上書きしようとしています。問題は、MessageFactoryのコンストラクターがたまたまプライベートメソッドであるということです。上記のコードを実行すると、不正なアクセス例外が発生します。groovyでプロキシを作成し、プライベートコンストラクターの問題を克服できる方法はありますか?

4

1 に答える 1

1

MessageFactory へのアクセス権があり、それを変更する意思がある場合は、ここで詳しく説明されているように、標準の依存性注入ソリューションを使用します: mock singleton ..ただし、特にGroovyではありません。

それ以外の場合、私が見つけた最善の回避策は、次のようにシングルトン インスタンス自体のメソッドをオーバーライドすることです。

@Singleton
class Test{
    def method(){"Unmocked method called"}
}


def test = Test.instance
test.metaClass.method = {-> null}

test.method() // Now returns null

当然、シングルトンとして、このインスタンスは (少なくとも理論的には) 変更されません... したがって、この方法でメソッドをオーバーライドすることは事実上グローバルです。

編集:または、(特に)コンストラクターのモックをサポートするGMockを使用できます。

于 2010-11-26T20:13:01.473 に答える