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

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

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

对我而言,此代码会导致在输出窗口中记录一个InvalidOperationException,并且测试 session 会提前炸弹。

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

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

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

最佳答案

答案是我误用了AssemblyInitialize

一旦我将调试器设置为在第一次机会异常时停止,就可以读取到我的方法不是静态的,也没有添加接受TestContext的参数。

如果您要问的话,如果必须以某种方式使用该属性,那么该属性的使用会很糟糕。不是很容易发现。

无论如何,这可行:

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

关于不建议将此用于ASP.NET测试的建议,将其覆盖。它可能会运行多次,但这无关紧要。

关于c# - MSTest-如何为UnitTest项目初始化log4net?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24692795/

10-17 01:42