Интеграция NUnit и Log4Net: утверждение на основе журнала - PullRequest
3 голосов
/ 20 января 2010

Это мой первый вопрос о переполнении стека. Мне не повезло найти ответ через Google или stackoverflow.

Мне интересно, чтобы тест nunit проверил log4net на предмет конкретной записи в журнале и подтвердил на основе результатов этого поиска.

Основываясь на несвязанном посте, который я прочитал re: log4net, я думаю, что, вероятно, смогу использовать MemoryAppender для этого с помощью метода GetEvents и просмотра возвращенного массива событий.

Но мне интересно: 1. Кто-нибудь делал это? Есть подводные камни или предложения? Есть альтернативные подходы? 2. Есть ли у кого-нибудь рецепт, который они могли бы представить?

Спасибо.

1 Ответ

3 голосов
/ 22 января 2010

Хорошо, отвечаю на мой собственный вопрос (точнее, мой сотрудник, спасибо Бет).

В вашей конфигурации для log4net: конфиг:

<log4net>
     <appender name="MemoryAppender" type="log4net.Appender.MemoryAppender" />
     <root>
     <level value="DEBUG" />
     <appender-ref ref="MemoryAppender" />
     </root>
</log4net>

В вашем .net коде:

List<string> messages = new List<string>();
Hierarchy hierarchy = LogManager.GetLoggerRepository() as Hierarchy;
MemoryAppender appender = hierarchy.Root.GetAppender("MemoryAppender") as MemoryAppender;
LoggingEvent[] eventList = appender.GetEvents();

foreach (LoggingEvent item in eventList)
   messages.Add(item.RenderedMessage);

return messages.ToArray();

Получив массив сообщений, делайте что хотите.

Это не относится, если у вас есть существующий файл журнала и вы хотите найти его.

...