Использование NLog с MSTest (.NET Core 2.0) - PullRequest
0 голосов
/ 29 мая 2018

У меня есть решение, которое я построил с использованием .NET 4.7.Это решение имеет два проекта:

  • Библиотека классов (.NET 4.7.2)
  • Проект модульного тестирования (.NET Framework)

Iпытаюсь перенести это решение на использование .NET Standard |Core.

Я успешно перенес библиотеку классов в проект .NET Standard 2.0.Я также перенес проект модульного тестирования в .NET Core 2.0 mstest проект .Все компилируется.Я могу запустить свои тесты, как и ожидалось.Однако, никакие журналы не пишутся через NLog.

В моей версии решения .NET 4.7, когда я запускал модульные тесты, фактический файл журнала записывался через NLog.Тем не менее, в новом .NET Standard |Реализация ядра, этот файл журнала не записывается.У меня есть следующие два файла в моем проекте mstest:

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
</configuration>

nlog.config

<?xml version="1.0" encoding="utf-8" ?>
<!-- XSD manual extracted from package NLog.Schema: https://www.nuget.org/packages/NLog.Schema-->
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"  
    xsi:schemaLocation="NLog NLog.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    autoReload="true"
    internalLogFile="c:\temp\console-example-internal.log"
    internalLogLevel="Info" >
  <targets>
    <target name="myLogs" xsi:type="File" deleteOldFileOnStartup="true" fileName="${basedir}/logs/MyLogs.json" createDirs="true" keepFileOpen="true" encoding="utf-8" layout="${message}" />
    <target name="traceLogs" xsi:type="File" deleteOldFileOnStartup="true" fileName="${basedir}/logs/trace.log" createDirs="true" keepFileOpen="true" encoding="utf-8" layout="[${longdate}] ${message}${exception:format=ToString}"></target>
  </targets>

  <rules>
    <logger name="MyLogger" minlevel="Info" writeTo="myLogs" />
    <logger name="TraceLogger" minlevel="Trace" writeTo="traceLogs" />
  </rules>
</nlog>

В моем проекте mstest я также добавил ссылки на:

  • Microsoft.Extensions.DependencyInjection
  • NLog
  • NLog.Extensions.Logging

Я выполнил шаги, обозначенные здесь .Кроме того, я ничего не делал, кроме шага 2. Нужен ли этот материал для проекта mstest?Если да, то где?Кажется, что для чего-то, что уже работает, нужно много дополнительных вещей.

1 Ответ

0 голосов
/ 30 мая 2018

При запуске модульных тестов трудно найти nlog.config, поскольку реализации будут перемещать библиотеки DLL (и большую часть времени не nlog.config) во временные папки.

Рекомендуется настроить NLog изкод в модульном тесте проекта.( здесь) )

Другой вариант - загрузить файл конфигурации NLog вручную.Вам необходимо указать путь к nlog.config для XmlLoggingConfiguration конструктора:

LogManager.Configuration = new XmlLoggingConfiguration(pathToNLogConfig);

Не по теме, но по теме:

В модульном тесте рекомендуется записывать журналы событий не вфайл, но в памяти, например, Целевой объект памяти .Это делает модульное тестирование более надежным.

...