2016-08-23 2 views
1

Так что я немного осмотрелся. Большинство потоков, которые я нахожу, относятся к людям, которые хотят запустить log4net в своих реальных тестах. Это означает, что они хотят записывать записи в свой тестовый класс. Мне не нужны записи журнала из моих фактических тестов. Но мне нужны ожидаемые записи журнала из кода, который я тестирую. Это мой первый раз, когда я использую Log4net. Если я запускаю собственный код, записи журнала работают. Если я запускаю тест, никаких записей в журнале нет. Я предполагаю, что он не инициализирован должным образом или, возможно, у меня нет правильной настройки log4net в моем UnitTest (возможно, в appconfig или сборке?). Это приложение MVC 5. Вот пример.Log4net не работает с тестами NUnit

Nunit Test (основы):

namespace MyUnitTests 
[TestFixture] 
public class MyTestClass 
{ 
    [Test] 
    public void MyTest 
    { 
     //arrange 
     var testVar = @"string"; 

     //act 
     MyProjectClass.Method(testVar); 

     //assert something 
    } 
} 

так над в MyProject у меня есть (основы):

public class MyProjectClass : Controller 
{ 
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(MyProjectClass)); 

    public static void Method(string myString) 
    { 
     //does whatever 
     log("added value"); 
    } 

Так что я, очевидно, упростили это для обсуждения. Но когда я запускаю свой фактический тест, мой тест проходит, ценности и результат все так, как должно быть. Я просто никогда не вижу запись журнала в журнале для метода, который я только что протестировал. Я уверен, что мне не хватает чего-то простого. Любая помощь будет принята с благодарностью. Благодаря!

ответ

1

Если вы посмотрите в app.config для своего основного проекта, вы увидите раздел конфигурации log4net, в котором указывается расположение файла журнала.

Сначала нужно добавить log4net к вашему <configSections> так:

<configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" /> </configSections>

Вы можете добавить <log4net> раздел в <configuration> тега. Документацию по этому вопросу можно найти here.

+0

Так что я попробовал добавить то, что у меня было в WebConfig, в свой AppConfig в своем UnitTest. Это все еще не сработало. – Puerto

+0

Я не делал Ассамблеи, хотя. // logger [сборка: log4net.Config.XmlConfigurator (ConfigFile = "Web.config", Watch = true)]. Позвольте мне попытаться добавить это также к моему проекту UnitTest. – Puerto

+0

Убедитесь, что у вас есть ссылка на сборку log4net из проекта UnitTest. –

1

Я просто хочу добавить вышеуказанный ответ. В дополнение к настройке appconfig в модуле UnitTest так же, как ваш веб-интерфейс приложения (редактирование значения для местоположения файла журнала, если вы хотите), вам также необходимо добавить запись сборки, как и для вашего приложения (изменение web.config в приложении .config в моем случае).

//logger 
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "app.config", Watch = true)]  

Вам также потребуется инициализировать регистратор (по крайней мере, я) в вашем модульном тесте. Поэтому в основном я добавил это в мой вариант моего теста, если захотел, чтобы мой вход в метод, который я тестировал, срабатывал. Добавьте что-то вроде этого в свой аранжировка или настройку для вас, возможно, вы можете испытать класс:

[Test] 
public void MyTest 
{ 
    //arrange 
    log4net.ILog log = log4net.LogManager.GetLogger(typeof(MyTestClass)); 
     log4net.Config.XmlConfigurator.Configure(); 

} 
Смежные вопросы