Logger.WriteコマンドがMVCコントローラーの1つで正しいメッセージとともに実行されることを検証する単体テストを作成したいと思います。
ロガーが書き込むリスナーをモックすることはできますが、保存されているメッセージに到達する方法がわかりません。例えば、
var mockListener = new Mock<MyTraceListener>();
// the .Write method is void so I can't use .Returns() on my mock
mockListener.Setup(listener => listener.Write(It.IsAny<string>()))
MyController controller = new MyController();
MyController.Index();
//次に、Indexメソッドは、MyTraceListenerに書き込むカテゴリに対して次のLogger.Write()を呼び出します。
Logger.Write("test message", "MyCategory");
このロガーへの書き込みコマンドは、入力文字列を返したり、アサーションステートメントで検証するためのパラメーターに保存したりしません。Moqの検証またはセットアップの1つ、または.when(これが何であれ)関数を使用して、ログに記録されたメッセージを取得したり、少なくともメッセージが実行されたことを確認したりできますか?
できれば、ログエントリを単体テストの変数に格納して、次のことを表明できるようにします。
Assert.AreEqual(loggedMessage, "test message");
誰かがこれを行うための戦略を知っているなら、私はそれを大いに感謝します。