Unit testing 为什么';log4net XmlConfigurator属性是否适用于我的单元测试

Unit testing 为什么';log4net XmlConfigurator属性是否适用于我的单元测试,unit-testing,visual-studio-2013,resharper,log4net,mstest,Unit Testing,Visual Studio 2013,Resharper,Log4net,Mstest,我正在使用log4net,试图登录我的单元测试。如果我手动呼叫 log4net.Config.XmlConfigurator.Configure(); 既然这样做有效,似乎就消除了所有的“错误配置,配置位置”问题 它是可行的,但是有大量的测试类,所以这并不好 我补充说 [assembly: log4net.Config.XmlConfigurator(Watch=true)] 到我的测试项目的assemblyinfo,但是当我运行(通过本机MSTest或Resharper测试运行程序)时,我

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

log4net.Config.XmlConfigurator.Configure();
既然这样做有效,似乎就消除了所有的“错误配置,配置位置”问题

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

我补充说

[assembly: log4net.Config.XmlConfigurator(Watch=true)]
到我的测试项目的assemblyinfo,但是当我运行(通过本机MSTest或Resharper测试运行程序)时,我没有得到任何日志记录

帮助?

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

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

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


可以澄清您在何处添加了
[assembly
line?您是否在实际类中添加了它?它在属性folderI的assemblyinfo.cs中。我没有将其作为一项要求进行阅读,但jsut您显然无法对加载前发生的零件进行任何日志记录。是否以某种方式加载了程序集会阻止log4net读取程序集属性?是的,通常在主程序集的启动代码中,您将调用LogManager以加载程序集属性。完成此操作后,随后加载的程序集将能够进行日志记录。对于单元测试项目,测试运行程序将加载包含单元测试的程序集,因此测试运行程序是主程序集组装-而且不可能让测试运行程序读取属性,当加载包含测试的程序集时,读取属性似乎为时已晚。我已经找到了可能最终会使用的属性,因为每个程序集只能使用一次。
[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);