Log4Net не работает под MSTest

Я управляю сборкой проекта C# с помощью NuGet для получения Common.Logging.Log4Net. Все модульные тесты проходят без ошибок при запуске из Visual Studio 2010, но когда я запускаю из командной строки с помощью MSTest (и, следовательно, когда TeamCity делает то же самое), я получаю сбои, когда модульный тест выявляет класс, который делает это:

private static readonly ILog Log = LogManager.GetCurrentClassLogger();

и ошибка:

Метод тестирования MyProject.Tests.Unit.BusinessDateBuilderTest.CreateElementalTest выдал исключение: System.TypeInitializationException: Инициализатор типа для MyProject.Common.Library выдал исключение. ---> System.TypeInitializationException: Инициализатор типа для MyProject.Common.Initialization.Impl.InitializationLoaderImpl вызвал исключение. ---> Common.Logging.ConfigurationException: не удалось получить конфигурацию для Common.Logging из раздела конфигурации «common/logging». ---> System.Configuration.ConfigurationErrorsException: Произошла ошибка при создании обработчика раздела конфигурации для общего/ведения журнала: невозможно создать тип «Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net» (C:\Subversion\Project\ MyProject.Tests.Unit\bin\Debug\TestResults\rac_DWM300619 2012-10-30 11_58_34\Out\MyProject.Tests.Unit.dll.config строка 168) ---> Common.Logging.ConfigurationException: невозможно создать тип «Общий .Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net' ---> System.IO.FileNotFoundException: не удалось загрузить файл или сборку Common.Logging.Log4net или одну из ее зависимостей. Система не может найти указанный файл.

Я использую следующие зависимости NuGet:

Common.Logging.2.1.1 (версия DLL 2.1.1.0) Common.Logging.Log4Net.2.0.1 (версия DLL 2.0.0.0) log4net.1.2.10 (версия DLL 1.2.10)

Я заметил, что Common.Logging.Log4net.dll не копируется в выходную папку testresults - в этом проблема? Если да, то как мне это решить?


person RCross    schedule 30.10.2012    source источник
comment
Убедитесь, что сборка Common.Logging.Log4net скопирована в каталог, в котором выполняется тест.   -  person Steven    schedule 30.10.2012
comment
Да, но как? Common.Logging.dll копируется, а Common.Logging.Log4net.dll — нет.   -  person RCross    schedule 30.10.2012
comment
Добавьте ссылку на сборку из своего приложения.   -  person Steven    schedule 30.10.2012


Ответы (1)


MSTest несколько раз копирует сборки в новую папку и оттуда запускает тесты. Проблема в том, что некоторые версии (все версии?) используют какой-то статический анализ того, какие сборки копировать. И поскольку соединение log4net из общего ведения журнала очень динамично (цель использования общего ведения журнала), сборка никогда не копируется, следовательно, ваша ошибка.
Если вы хотите это исправить, вам нужно создать файл testsettings для MSTest (внутри Visual Studio). А затем добавьте в него deployItems (ваши отсутствующие сборки). Затем вам нужно указать на него свою командную строку. В teamcity вы делаете это в «Файле конфигурации запуска MSTest» при настройке бегуна MsTest.

person Konstantin    schedule 17.12.2012