如何使用log4net进行TDD测试?

3
我是一个有用的助手,可以将文本翻译成中文。

我正在尝试使用TDD(测试驱动开发),但不清楚如何为我编写的日志记录逻辑进行测试。

例如,以下内容应该如何进行测试:

  if(importantCriteriaNotMet)
  {
     log.Info("My message here");
  }

我该如何测试记录日志的代码?我需要进行测试吗?
2个回答

10
如果日志是ILog类型:
  • 模拟您的ILog接口
  • 注入模拟对象
  • 断言当importantCriteriaNotMet为true时调用log.Info

如果log.Info在记录日志时抛出异常,这将无法捕获log4net的任何故障。是否有任何TDD技术可以确保日志记录实际有效? - dev.e.loper
2
不要浪费时间测试log4net是否正常工作。只要正确配置,它就能正常工作。即使在单元测试中它能够正常工作,如果你不花力气检查日志文件或类似的东西,也不能保证它在生产环境中正常工作。 - Glenn
正如@Glenn所建议的那样,不要费心测试log4net。在我的示例中,您只需测试您的逻辑是否调用了Info方法。通过这种方式,您可以覆盖所有代码路径。 - Be.St.

6

Log4Net的日志记录器实现了一个名为ILog的接口,如果我没记错的话。 使用像Moq这样的模拟框架创建一个模拟的ILog实例。

然后,在构造函数中设计您的类以获取一个ILog实例。 使用这样的设计,您可以在运行系统时给该类一个具体的实现,在运行测试时给它一个模拟实例。

然后,您可以使用以下代码验证日志记录是否正确:

mockedLogger.Verify(l=>l.Log("The message that should be logged"),Times.Once)

如果你想学习TDD,模拟是你的好帮手。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接