4

重複の可能性:
静的メソッドをモックする jmock

クラス XX の静的メソッドを使用する従来の単体テストに取り組んでいます。Spring アプリケーション コンテキストからフィールド値を取得するようにクラスを変更しました。クラス XX を初期化できないため、単体テストが失敗するようになりました。

テストするロジックが複雑であり、クラス XX への呼び出しが他のレガシー クラスへの呼び出しの複数のレイヤー内にネストされているため、クラス XX をダミー サポート クラスでラップすることはできません。だから私はクラスクラスXX内の静的メソッドをモックする方法を見つけようとしています. これを行う方法はありますか?Jmock ライブラリを使用しています。

4

2 に答える 2

5

JMock で静的メソッドをモックする方法はないようです。この関連スレッドを参照してください。JMock の作成者は、コードに静的メソッドがある場合、そのコードは JMock を使用してテストする価値がないというエリート主義的な見方をしているようです。

よりフル機能のモック ツールセットを提供するJMockitのようなツールを使用することをお勧めします。

于 2012-09-06T17:48:25.800 に答える
1

powermock を使用すると、ここで詳細に説明されているように静的をモックできると思います

私も過去にこの問題を抱えていて、それを回避してコードを作成したので、メソッドを静的ではなく、クラスへの静的参照を持つことでJMockを使用できます。

例えば

public ClassToMock {
    public static final ClassToMock INSTANCE = new ClassToMock();

    private ClasstToMock() {};

    public void newNonStaticMethod1(){}
}

それ以外の

public ClassToMock {

    public ClasstToMock() {};

    public void static origStaticMethod1(){}
}

メソッド呼び出しは次のようになります

ClassToMock.INSTANCE.newNonStaticMethod1();

newNonStaticMethod1() は静的ではないため、これをモックできます。

CalssToMock ctor はプライベートであるため、静的インスタンスを介してのみアクセスできます。

于 2012-09-06T18:05:11.153 に答える