2011-02-07 13 views
6

Rhino Mockなどを使用してNLogログメソッドを模擬することは可能か簡単ですか?NLogログメソッドを模擬することは可能ですか?

+0

詳細なポスト[依存性の注入でNLogを使用]を参照してくださいhttp://slf.codeplex.com/ – Jon

+1

を見てみます(http://blog.tonysneed .com/2011/10/09/using-nlog-with-dependency-injection /)ポストはDIの例としてNInjectを使います。 –

答えて

2

仮想メソッドのみをモックできます。しかし、ロギング用のインタフェースを作成してNLogを使用して実装する場合は、依存性注入を使用できます。テストでは、疑似インタフェースを使用して、テスト中のシステムがロギングするものを記録しているかどうかを確認します。

 
public class SUT 
{ 
    private readonly ILogger logger; 
    SUT(ILogger logger) { this.logger = logger;} 
    MethodUnderTest() { 
    // ... 
    logger.LogSomething(); 
    // ... 
    } 
} 

// and in tests 
var mockLogger = new MockLogger(); 
var sut = new SUT(mockLogger); 
sut.MethodUnderTest(); 
Assert.That("Expected log message", Is.Equal.To(mockLogger.LastLoggedMessage)); 
1

簡単な答えは「いいえ」です。コードを見ると、依存性注入はサポートされていません。特に、実装が難しいように見えない(一見して)ので、むしろ監視のようです。

プロジェクト内の唯一のインターフェイスは、COM相互運用オブジェクトや他のいくつかのものをサポートするためのインターフェイスです。メインのLogger具象クラスはインターフェースを実装しておらず、仮想メソッドも提供していません。

自分でインターフェイスを提供するか、Moles/TypeMock /別の分離フレームワークを使用して依存関係を模擬することができます。その後install-package NLog.Interface

:Nugetを使用して

9

ILogger = new LoggerAdapter([logger-from-NLog]);

+0

シンプルだが効果的。もし誰かが何をしたいのであれば、Githubプロジェクトはここにあります:https://github.com/uhaciogullari/NLog.Interface – killthrush

関連する問題