2012-04-20 4 views
1

私はjmockを使ってレガシーコードとjunitテストを書いています(私も知っていますが、間違った順序です。私はいくつか精巧な伐採を行い、一般的に弦をつぶすクラスを持っています。私たちはロギングにlog4jを使用しており、これらのロギングされたメッセージをテストしたいと思います。私はLoggerクラスを嘲笑することを考えましたが、どうやってそれを行うのか分かりません。Logger.getLogger()using jmock

のように、通常我々はロガーは次のように行っている:

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

誰もが正確に記録されているかどうか確認する方法方法.getLogger(クラス)、または任意の他のアイデアを模擬するためにどのように任意のアイデアを持っていますか?

答えて

3

あなた自身がappenderと書いて、それにすべての出力をリダイレクトすることができます。

+0

Ha!私は数ヶ月前にこの方法でやったことがあるが、それを忘れてしまった。これは私がやることです、ありがとう – Edheene

3

本当に必要と思われる場合は、PowerMockをご覧ください。具体的には、それはmock static methodsの能力です。 PowerMockはEasyMockとMockitoと統合されていますが、それを守る必要がある場合は、JMockの統合を見つけることになるかもしれません。

は、私はそれはあなたのテストに影響を与えることなく、きれいにログインするように、あなたのテストフレームワークを設定あなたのテストの確保がが記録されますどのように依存していないと思います、と言ったよりよい方法です。私は一度記録されたものをチェックするいくつかの単体テストを維持しなければならず、これまでに見た中で最も脆弱で無駄な単体テストでした。私はそれができる時間があればすぐに書き直しました。

+1

+1私もロガーを嘲笑したテストを維持しなければなりませんでした。狂気 – artbristol

+0

私の "書き換え"の約80%が削除ボタンに当たっていた;-) – Jon

+0

しかし、これは私がするべきではないテストされたクラスを変更することを意味する(バグがあればコースの状況を除いて)。私はこの状況についても幸せではありませんが、今、おそらく将来これについて私ができることは何もありません。とにかくありがとう – Edheene

0

チェックこの同様の質問:質問を投稿すると回答を待つよりも、 How to mock with static methods?

ところでを、あなたの問題への既存のqusetionを検索することが容易です。

0

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

あなただけのモックLoggerオブジェクトを使用するあなたのテストクラスとテスタークラスで触れたすべてのコードに注釈

@UsingMocksAndStubs(Log4jMocks.class) 

を追加する必要があります。

this

を参照してください。しかし、これは文句を言わないメッセージをログに記録します。これで静的オブジェクトを扱う手間を省くことができます。