2012-01-26 8 views
2

私はTDDをやろうとしていますが、私が書いたロジックをロギングする方法はわかりません。log4netでTDDを実行するには?

フォックス例、何が次のテストのために次のようになります。

if(importantCriteriaNotMet) 
    { 
    log.Info("My message here"); 
    } 

どのように私は、ロギングコードをテストするのでしょうか? 私はそれをテストすべきでしょうか?

答えて

10

ログはアイログタイプの場合:

  • モックあなたアイログインターフェース
  • はあなたの嘲笑オブジェクト
  • を注入importantCriteriaNotMetが
+0

log.Infoがログ出力中に例外をスローすると、log4netの失敗をキャッチしません。どんなTDD技術でもロギングが実際に機能することを保証しますか? –

+2

log4netが動作しているかどうかテストしてはいけません。それが正しく構成されているかどうか。ロギングファイルやそれに類するものをチェックして確認しても単体テストで動作しても、それが運用環境で動作することは保証されません。 – Glenn

+0

@Glennはlog4netのテストを気にしないので、私の例では、Infoメソッドが呼び出されるというあなたのロジックだけをテストしています。このようにして、すべてのコードパスをカバーします。 –

6

log4netの真のときlog.Infoが呼び出されたと主張。 ■正しく覚えていれば、LoggerはILogというインターフェースを実装しています。 Moqのような模擬フレームワークを使用し、模擬ILogインスタンスを作成します。

次に、クラスを設計してコンストラクタでILogインスタンスを取得します。 このような設計を使用すると、テストを実行している間にシステムを実行している模擬インスタンスとクラスを具体的な実装にすることができます。

あなたは私はこのようなコードで適切に行わログかどうかを確認することができますザ・:あなたはTDDのモックを学びたいのであれば

mockedLogger.Verify(l=>l.Log("The message that should be logged"),Times.Once) 

はあなたの友達です。

関連する問題