通过依赖注入与使用单元测试的隐式依赖进行日志记录

本文关键字:依赖 日志 记录 单元测试 注入 | 更新日期: 2023-09-27 18:05:23

我有一个需要使用Log4net进行日志记录的类。下面是考虑到单元测试的两种可能的解决方案。

解决方案1:

public class Car{
  ILog log;
  public Car(ILog log){
  this.log = log
  }
   //use logging for other methods
}

解决方案2:

public class Car
  ILog log = LogManager.GetLogger(typeof(Car));
  public Car(){
  }
   //use logging for other methods
}

问题:

1)一般来说哪一种方式更好?

通过依赖注入与使用单元测试的隐式依赖进行日志记录

对于解决方案2,我应该如何替换单元测试中的记录器

您正在使用静态工厂(LogManager),但非静态工厂可能更好。然后您可以传入工厂本身,单元测试可以使用它创建自己的ILog对象。这使得mock更容易。

您仍然需要一种方法来创建工厂,但是您可以传入一个仪表化的测试版本来帮助进行测试。