MSTest - 如何为UnitTest项目初始化log4net?

Luk*_*ett 13 c# asp.net-mvc unit-testing log4net-configuration visual-studio-2012

我有一个用于测试ASP.NET MVC项目的Visual Studio单元测试项目.

将程序集级别log4net.Config.XmlConfigurator属性添加到AssemblyInfo.cs不起作用,SO上的其他人发现他们必须使用直接调用log4net.Config.XmlConfigurator.Configure();

问题是,如何才能对单元测试进行此操作?Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitialize在类方法上使用属性的答案不起作用.

对我来说,这段代码导致InvalidOperationException输出窗口登录,测试会话提前爆炸.

[TestClass]
public sealed class Startup
{
    [AssemblyInitialize]
    public void Configure()
    {
        System.Diagnostics.Debug.Write("Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitialize");
    }
}
Run Code Online (Sandbox Code Playgroud)

阅读文档,MSDN表示不要AssemblyInitialize在ASP.NET的测试项目中使用,因为它们可能不止一次被调用.

那么如何才能在运行任何测试之前配置log4net?

Luk*_*ett 26

答案是我误用了AssemblyInitialize.

一旦我将调试器设置为在第一次机会异常时停止,我就能够读到我的方法不是静态的,并且我没有添加一个接受TestContext它的参数.

如果你问我,如果方法必须是某种方式,那么使用属性是非常糟糕的.不是很容易被发现.

无论如何,这工作:

[TestClass]
public static class Startup
{
    [AssemblyInitialize]
    public static void Configure(TestContext tc)
    {
        log4net.Config.XmlConfigurator.Configure();
    }
}
Run Code Online (Sandbox Code Playgroud)

关于不使用它进行ASP.NET测试的建议,请点击它.它可能不止一次运行,但这无关紧要.