我想創建一個單元測試,驗證Logger.Write命令是在我的一個MVC控制器中使用正確的消息執行的。如何使用Moq驗證企業庫日誌記錄?
我可以模擬記錄器寫入的監聽器,但我不知道如何訪問存儲的消息。例如,
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();
//然後索引方法調用下面Logger.Write()到寫入MyTraceListener類別:
Logger.Write("test message", "MyCategory");
這寫命令記錄器不返回輸入字符串或將其存儲到參數中以供我使用Assertion語句進行驗證。我可以使用Moq驗證或設置之一,或.when(無論這是什麼)函數來獲取記錄的消息,或者至少檢查它是否被執行?
最好,我想日誌條目到一個變量保存在我的單元測試,所以我可以斷言這一點:
Assert.AreEqual(loggedMessage, "test message");
如果任何人的策略要做到這一點我將不勝感激的人知道。
這是有幫助的。我可以配置它來檢測我的控制器源代碼中的Logger.Write命令,而不是測試方法中的mockLogger? – barnone
如果我明白你的要求是正確的,你需要設置模擬記錄器並將它作爲依賴注入到控制器中,以便按照你想要的方式進行連接。 –
這就是我希望避免的。我相當缺乏經驗,這對我來說似乎不是一個好的編碼習慣。 – barnone