unit-testing - 如何使用最小起订量来验证企业库日志记录?

标签 unit-testing testing logging moq enterprise-library

我想创建一个单元测试来验证 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/

相关文章:

python - 运行测试时 Django 用户不在请求对象中

ios - 使用 RestKit 对静态库进行单元测试

javascript - 对照另一个数组检查数组项

Android ==> 登录而不进入 Debug模式?

javascript - 在 React 中测试按钮的禁用状态

java - 在完成()之后从 Activity 中获取结果;在 Android 单元测试中

testing - 使用反射调用带有 nil 参数的函数会导致 "Call using zero Value argument" panic

oracle - 我们如何验证 oracle 中的映射文档以确保已提供所有信息?

java - Log4j2.0 异步记录器导致 OutOfMemory Java 堆空间

python 从内核日志中读取最后三行