Подтвердить что ты не робот

MSTest - Как инициализировать log4net для проекта UnitTest?

У меня есть проект Visual Studio unit test для тестирования проекта ASP.NET MVC.

Добавление атрибута уровня сборки log4net.Config.XmlConfigurator в AssemblyInfo.cs не работает, и другие люди из SO обнаружили, что им нужно использовать прямой вызов log4net.Config.XmlConfigurator.Configure();

Вопрос в том, как это можно сделать для unit test? Ответ на использование атрибута Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitialize для метода класса не работает.

Для меня этот код приводит к тому, что InvalidOperationException регистрируется в окне вывода, а тестовый сеанс бомбит раньше.

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

Считывая документацию, MSDN заявляет, что не следует использовать AssemblyInitialize для тестовых проектов для ASP.NET, поскольку они могут быть вызваны более одного раза.

Итак, как это сделать, чтобы log4net был настроен до запуска любых тестов?

4b9b3361

Ответ 1

Ответ заключался в том, что я неправильно использовал AssemblyInitialize.

Как только я установил отладчик для остановки первых случайных исключений, я смог прочитать, что мой метод не был статичным, и я не добавил параметр, принимающий TestContext к нему.

Очень дрянное использование атрибута, если метод должен быть определенным способом, если вы спросите меня. Не очень понятно.

В любом случае, это работает:

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

Что касается рекомендации не использовать это для теста ASP.NET, держите его. Он может запускаться несколько раз, но это не имеет значения.