MSTest - How do I initialize log4net for a UnitTest project?

佐手、 提交于 2019-12-21 07:21:22

问题


I have a Visual Studio unit test project for testing an ASP.NET MVC project.

Adding the assembly-level log4net.Config.XmlConfigurator attribute to AssemblyInfo.cs doesn't work and other people on SO have found they have to use a direct call to log4net.Config.XmlConfigurator.Configure();

The question is, how can this be done for a unit test? The answer to use Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitialize attribute on a class method doesn't work.

For me, this code results in an InvalidOperationException logged in the output window and the test session bombs early.

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

Reading the documentation, MSDN says not to use AssemblyInitialize on test projects for ASP.NET since they may be called more than once.

So how can this be done so that log4net is configured before any tests are run?


回答1:


The answer was that I was mis-using AssemblyInitialize.

Once I'd set the debugger to halt on first chance exceptions I was able to read that my method was not static and I'd not added a parameter accepting a TestContext to it.

A pretty crappy use of an attribute if the method has to be a certain way, if you ask me. Not very discoverable.

Anyway, this works:

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

Regarding the advice not to use this for ASP.NET test, sod it. It might get run more than once but that doesn't matter.



来源:https://stackoverflow.com/questions/24692795/mstest-how-do-i-initialize-log4net-for-a-unittest-project

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!