Использование файла app.config с NUnit3 в консольном приложении .NET Core - PullRequest
8 голосов
/ 05 апреля 2019

Среда:

В моем решении в настоящее время есть три проекта:

  • .NET Standard 2.0 библиотека с некоторым кодомнравится тестировать.
  • Консольное приложение .NET Core 2.2, которое ссылается на библиотеку, чтобы убедиться, что оно работает.
  • Консольное приложение .NET Core 2.2, созданное с использованием шаблона «Тестовый проект NUnit»в VS.

Все зависимости в моем тестовом проекте все от NuGet:

  • Moq Version = "4.10.1"
  • nunit "Version= "3.11.0"
  • NUnit.ConsoleRunner "Version =" 3.10.0 "
  • NUnit3TestAdapter" Version = "3.13.0"
  • Microsoft.NET.Test.SDK "Version =" 16.0.1 "

Проблема:

Стандартная библиотека .NET опирается на наличие файла app.configв любом приложении, которое его использует.Для сопоставления значений с классом используются атрибуты ConfigurationSection и ConfigurationElement , очень похожие на этот ответ: Пользовательский раздел конфигурации с вложенными коллекциями

В консольном приложении .NET Core есть файл app.config, и библиотека способна прекрасно разбирать значения и использовать их.Да.

Консольное приложение NUnit, с другой стороны, содержит тот же файл app.config, но библиотека, похоже, его не видит.Как только он пытается прочитать значение, используя ConfigurationManager.GetSection("..."), он возвращает null.

Кто-нибудь получил файл app.config для работы с NUnit3 в такой среде?


Что я пробовал:

Это кажется подобно , оно поддерживает конфигурационные файлы , но я не уверен, что документыссылаясь на какой-то специальный файл конфигурации NUnit или файл app.config.

  • Я попытался переименовать app.config в my_test_project_name.dll.config
  • Я установил файл конфигурации "Копировать в выходной файл"директория », установленная на« Копировать всегда »
  • Я перепробовал все подобные имена, которые могли придумать (app.config, App.config, my_test_project_name.config, my_test_project_name.dll.config и т. д.)

Я также попробовал несколько вещей в одном тесте, который я написал до сих пор, чтобы попытаться как-то установить конфигурационный файл, например предложение использовать AppDomain.CurrentDomain.SetData() (не сработало,возможно, потому что NUnit3 не поддерживает AppDomain):

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\Path\To\My\Tests\my_test_project_name.dll.config");

Хотя в N есть тестыРепозиторий, который, кажется, предлагает с использованием файла конфигурации в NUnit3, возможен , на этот конкретный тестовый файл есть ссылка только в демонстрационном проекте .NET 4.5 , а не .NET Coreдемонстрационный проект .

Ответы [ 2 ]

7 голосов
/ 09 апреля 2019

Когда вы выполняете следующую строку в модульном тесте и проверяете его результат, вы можете заметить, что проект NUnit ищет файл конфигурации с именем testhost.dll.config.

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath;

Сокращенный путь : ClassLibrary1\NUnitTestProject1\bin\Debug\netcoreapp2.2\testhost.dll.config

Таким образом, я создал пример использования файла конфигурации с ASP.NET Core 2.2 и шаблоном NUnit Test Project ,Также убедитесь, что для параметра Копировать в выходной каталог для файла конфигурации задано значение Copy always.

UnitTest.cs

public class UnitTest
{
    private readonly string _configValue = ConfigurationManager.AppSettings["test"];

    [Test]
    public void Test()
    {
        Assert.AreEqual("testValue", _configValue);
    }
}

testhost.dll.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="test" value="testValue" />
  </appSettings>
</configuration>
0 голосов
/ 18 июня 2019

Я столкнулся с той же проблемой, когда у меня был App.config файл в NUnit тестовом проекте, я переименовал App.config в testhost.dll.config, затем начал читать значения файла конфигурации.

...