我想创建一个单元测试来验证 Logger.Write 命令是否在我的一个 MVC Controller 中使用正确的消息执行。
我可以模拟记录器写入的监听器,但我不知道如何访问存储的消息。例如,
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 方法调用以下 Logger.Write() 来写入 MyTraceListener 的类别:
Logger.Write("test message", "MyCategory");
对记录器的写入命令不会返回输入字符串或将其存储到参数中以供我使用断言语句进行验证。我可以使用 Moq 验证或设置或 .when (无论这是什么)函数之一来获取记录的消息,或者至少检查它是否已执行?
最好,我想将日志条目存储到单元测试中的变量中,以便我可以断言:
Assert.AreEqual(loggedMessage, "test message");
如果有人知道执行此操作的策略,我将不胜感激。
最佳答案
假设您正在使用 Entlib 5.0,那么已经有一个模拟点适合您。不要直接使用 Logger.Write,而是将 LogWriter 实例注入(inject) Controller 中。然后,您可以在测试中模拟 LogWriter 对象。
关于unit-testing - 如何使用最小起订量来验证企业库日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11245331/