Seção de configuração log4net para Test Project NUnit
-
03-07-2019 - |
Pergunta
Estou executando o NUnit com o projeto chamado AssemblyTest.nunit. O teste de chama outra montagem que utiliza o log4net montagem. Esta é usando nunit versão 2.4.3 com o .NET Framework 2.0.
Em TestFixtureSetup estou chamando log4net.Config.XmlConfigurator.Configure () e estou recebendo o seguinte erro:
System.Configuration.ConfigurationErrorsException: Configuration system failed to initialize ---> System.Configuration.ConfigurationErrorsException: Unrecognized configuration section log4net. (C:\path\to\assembly.dll.config line 7)
Existe uma maneira de corrigir isso sem mudar o nome do arquivo de configuração para 'AssemblyTest.config'?
Solução
Criar um arquivo de configuração separado para log4net com elemento raiz log4net.
Em TestFixtureSetup criar um objeto FileInfo para este arquivo de configuração e dá-la como argumento para log4net.Config.XmlConfigurator.Configure ().
Outras dicas
Eu tive o mesmo problema, porque eu esqueça de adicionar o log4net definição no configSections elemento.
Então, se você quiser colocar log4net -elements para o app.config, você precisa incluir o configSections elemento (que diz onde log4net -elements são definidos) na parte superior do arquivo de configuração.
Tente assim:
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
...
</log4net>
</configuration>
Eu não sei porque vocês estão presos em arquivos de configuração, para nunit se você gostaria de ver registros em execução na janela de saída de texto no corredor de teste nunit tudo o que você precisa fazer é seguir linha de código,
BasicConfigurator.Configure();
melhor ponto de adicionar esta linha é o construtor da classe de teste
por exemplo.
[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");
}
}