Раздел конфигурации log4net для тестового проекта NUnit
-
03-07-2019 - |
Вопрос
Я запускаю NUnit с проектом AssemblyTest.nunit.Тест вызывает другую сборку, которая использует сборку log4net.Используется nunit версии 2.4.3 с платформой .net 2.0.
В TestFixtureSetup я вызываю log4net.Config.XmlConfigurator.Configure() и получаю следующую ошибку:
System.Configuration.ConfigurationErrorsException: Configuration system failed to initialize ---> System.Configuration.ConfigurationErrorsException: Unrecognized configuration section log4net. (C:\path\to\assembly.dll.config line 7)
Есть ли способ исправить это, не переименовывая файл конфигурации в AssemblyTest.config?
Решение
Создайте отдельный файл конфигурации для log4net с корневым элементом log4net.
В TestFixtureSetup создайте объект FileInfo для этого файла конфигурации и передайте его в качестве аргумента функции log4net.Config.XmlConfigurator.Configure().
Другие советы
У меня была та же проблема, потому что я забыл добавить log4net определение в configSections элемент.
Итак, если вы хотите поставить log4net-elements в app.config, вам необходимо включить configSections элемент (который сообщает, где log4net-элементы определены) в верхней части файла конфигурации.
Попробуйте это так:
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
...
</log4net>
</configuration>
Я не знаю, почему вы, ребята, застряли в файлах конфигурации. Для nunit, если вы хотите видеть журналы, работающие в окне вывода текста в программе запуска тестов nunit, все, что вам нужно сделать, это следовать строке кода:
BasicConfigurator.Configure();
лучший момент добавить эту строку - конструктор класса Test
например
[TestFixture]
public class MyTest
{
log4net.ILog log = log4net.LogManager.GetLogger(typeof(MyTest));
public MyTest()
{
BasicConfigurator.Configure();
}
[SetUp]
public void SetUp()
{
log.Debug(">SetUp");
}
[TearDown]
public void TearDown()
{
log.Debug(">TearDown");
}
[Test]
public void TestNothing()
{
log.Debug(">TestNothing");
}
}