为什么log4net XmlConfigurator属性不适用于我的单元测试

时间:2015-04-17 15:02:13

标签: unit-testing visual-studio-2013 resharper log4net mstest

我正在使用log4net,试图登录我的单元测试。如果我手动拨打

log4net.Config.XmlConfigurator.Configure();

由于这有效,这似乎消除了所有“错误的配置,配置位置”问题。

它有效,但是有大量的测试类,所以这并不好。

我添加了

[assembly: log4net.Config.XmlConfigurator(Watch=true)]

到我的测试项目的assemblyinfo,但是当我运行时(通过本机MSTest或Resharper测试运行器),我没有记录。

帮助?

2 个答案:

答案 0 :(得分:1)

正如documentation for assembly attributes

中所述
  

因此,如果使用配置属性,则必须调用log4net   允许它读取属性。一个简单的电话   LogManager.GetLogger将导致调用程序集上的属性   被阅读和处理。 因此必须进行日志记录   在应用程序启动期间尽早调用,以及   当然,在加载和调用任何外部程序集之前

由于单元测试运行器加载测试程序集以便查找和测试,因此无法在单元测试项目中使用程序集属性初始化log4net,您必须使用XmlConfigurator

编辑:as linked在OP的评论中,可以使用AssemblyInitializeAttribute

在整个测试项目的一个位置完成

答案 1 :(得分:1)

Source

[AssemblyInitialize()]
public static void MyTestInitialize(TestContext testContext)
{
// Take care the log4net.config file is added to the deployment files of the testconfig
FileInfo fileInfo;
string fullPath = Path.Combine(System.Environment.CurrentDirectory, "log4net.config");
fileInfo = new FileInfo(fullPath);