2

私はレガシーコードに取り組んでおり、jmockを使用していくつかのjunitテスト(私は知っている、間違った順序、気にしない)を書いています(これも私の選択ではありませんでした、それについて変更することはできません)そして私はいくつかの精巧なロギングを行うクラスを持っています一般的な文字列。ロギングにlog4jを使用しており、それらのロギングされたメッセージをテストしたいと思います。Loggerクラスをモックすることを考えましたが、その方法がわかりません。

通常のように、Loggerは次のように実行します。

private static final Logger LOG = Logger.getLogger(SomeClass.class);

メソッド.getLogger(class)をモックする方法や、正確にログに記録されたものを確認する方法を知っている人はいますか?

4

4 に答える 4

4

独自のアペンダーを作成し、すべての出力をそれにリダイレクトできます。

于 2012-04-20T07:11:25.000 に答える
3

本当にこれを行う必要があると思われる場合は、PowerMockを確認する必要があります。より具体的には、静的メソッドをモックする機能です。PowerMock は EasyMock および Mockito と統合されていますが、JMock との統合に固執する必要がある場合は、探し回ると JMock との統合も見つかる可能性があります。

そうは言っても、テスト フレームワークをセットアップして、テストに影響を与えずに適切にログを記録し、ログに記録される内容にテストが依存しないようにすることが、より良いアプローチだと思います。ログに記録された内容をチェックする単体テストをいくつか維持しなければならなかったことがありますが、それらは私が今まで見た中で最も脆弱で役に立たない単体テストでした。時間ができたのですぐに書き直しました。

于 2012-04-20T07:12:03.693 に答える
0

この同様の質問を確認してください: 静的メソッドでモックする方法は?

ちなみに、質問を投稿して回答を待つよりも、問題に対する既存の質問を検索する方が簡単です。

于 2012-04-20T07:14:53.360 に答える
0

私が見つけた最も簡単な方法は、JMockit でモック log4j オブジェクトを使用することです。

注釈を追加するだけです

@UsingMocksAndStubs(Log4jMocks.class)

テストクラスに追加し、テスタークラスが触れるすべてのコードはモック Logger オブジェクトを使用します。

これを見る

しかし、これはメッセージを記録しません。これで静的オブジェクトを扱う煩わしさから逃れることができます。

于 2014-01-24T05:50:21.617 に答える