2

クラスで静的メソッドをモックする方法の例をたくさん見ました。

定義で初期化されているクラスの静的プロパティをモックしたい。

何かのようなもの:

class MyClass {
   private static log = LogFactory.getLog(this)
}

テストで null にする必要があり、それ自体を初期化しないようにするために、ログ プロパティをモックしたいと考えています。

4

2 に答える 2

0

「ログ」をプロパティと呼んでいますが、実際にはそうではありません。MyClass が Groovy クラスであると仮定すると、プロパティは次のように private または public 修飾子なしで宣言されます。

class MyClass {
    static log = LogFactory.getLog(this)
}

あなたが持っているのは、初期化子を持つプライベート静的変数です。この場合、プロパティ アクセス メソッドは生成されず、変数はプロパティとは見なされません。

これは初期化子を持つプライベート変数であり、クラスを変更したくないと述べているため、初期化子の実行を停止することはできません。したがって、ここで行う最善の方法は、getLog() 呼び出しをモックアウトして null を返すことです。シンプルだが大雑把なアプローチは次のとおりです。

LogFactory.metaClass.static.getLog = {
    return null
}

ただし、これにより、アプリケーション全体のすべてのログ ルックアップが強制終了されます。これは単純な単体テストには問題ありませんが、より具体的な解決策は、Groovy モック (MockFor および StubFor) を使用することです。これにより、特定のコード ブロックで getLog 呼び出しをモックできます。詳細はこちら

興味深いことに、ログ変数を初期化しないのはなぜですか?

于 2013-09-17T22:35:24.213 に答える