Проблема с NUnit и app.config

Когда я запускаю простой тест на подключение к проверке БД, я получаю сообщение об ошибке в NUnit:

[Test]
public void TestConn()
{
    string  connectionString = ConfigurationManager.ConnectionStrings["FertigungRead"].ConnectionString;
    SqlConnection connection = new SqlConnection(connectionString);
    connection.Open();
    Assert.AreEqual(ConnectionState.Open, connection.State);
    connection.Close();
 }

System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта.

онлайн:

connectionString = ConfigurationManager.ConnectionStrings["FertigungRead"].ConnectionString;

Могу ли я использовать ConfigurationManager в тестах?

8 ответов

Да, ты можешь. Вы должны быть уверены, что любая конфигурация, на которую вы ссылаетесь в своих тестах, действительно существует в app.config тестового проекта.

Другими словами, проект, в котором находится ваш тест, не имеет строки подключения "FertigungRead" определены в его app.config,

Один из способов сделать это - добавить app.config тестируемой системы на тестовый проект в качестве ссылки, таким образом любые изменения происходят в обоих проектах.

  1. Перейти к NUnit/Project/Edit...
  2. В панели свойств конфигурации перейдите к имени файла конфигурации
  3. Поместите туда yourAssemblyName.dll.config

Примечание: если не работает, попробуйте добавить путь к нему, например, bin \ Debug \ yourAssemblyName.dll.config

Файл вашего тестового проекта yourAssemblyName.nunit будет обновлен.

И да, убедитесь, что App.config в вашем тестовом проекте совпадает с тем, что вы используете в тесте, т.е.

[Test]
public void TestConn()
{
   var sss = ConfigurationManager.AppSettings["TestKey"];
}

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="TestKey" value="testKeyValue"/>
  </appSettings>
</configuration>

Я хотел бы добавить точку. В документации по nunit есть примечание, и в зависимости от сценария использования необходимо указать имя и расположение файла конфигурации. Я застрял в этом вопросе на некоторое время.

Документация гласит:

Если загружается одна сборка, то файлу конфигурации присваивается имя файла сборки с расширением config. Например, файл конфигурации, используемый для запуска nunit.tests.dll, должен называться nunit.tests.dll.config и находиться в том же каталоге, что и dll.

Если загружается проект NUnit, файл конфигурации использует имя файла проекта с расширением, измененным на config. Например, для проекта AllTests.nunit потребуется файл конфигурации с именем AllTests.config, расположенный в том же каталоге, что и AllTests.nunit. При загрузке проектов или решений Visual Studio применяется то же правило.

http://www.nunit.org/index.php?p=configFiles&r=2.2.10

Ваши модульные тесты должны работать, пока у вас есть такая же конфигурация для вашего тестового проекта, как и для вашего основного проекта.

Я бы предложил использовать событие предварительной сборки в вашем тестовом проекте, чтобы скопировать файл конфигурации вашего приложения в тестовый проект. Это избавляет от необходимости поддерживать два набора конфигурации.

скопировать $(SolutionDir) путь к главному проекту \Web.config $(ProjectDir)App.config

Когда файл конфигурации используется в проекте, в котором выполняется тест, должны соблюдаться определенные соглашения об именах.

Имя файла конфигурации должно быть именем файла сборки с расширением config. Например, файл конфигурации, используемый для запуска MyUnitTest.tests.dll должен быть назван MyUnitTest.tests.dll.config и он должен быть в том же каталоге, что и MyUnitTest.nunit

Также мы можем настроить это в prebuild как ниже

copy $(SolutionDir)path-to-main-project\Web.config $(ProjectDir)App.config 

Смотрите мой ответ nunit и конфиги. Вы должны сказать nunit, как называется файл конфигурации. по умолчанию он ищет namespace.config

Зачем вам нужен модульный тест, чтобы увидеть, работает ли SqlConnection? Вы должны проверить свой код, а не Microsoft. Я не вижу смысла в проверке правильности строки подключения в ваших модульных тестах. Конфигурация, используемая в модульных тестах, отличается от конфигурации вашего производственного кода.

В общем, однако, если вам нужны некоторые данные конфигурации для модульных тестов, создайте файл app.config в тестовом проекте. Заполните элементы appSettings и connectionStrings и т. Д. Соответствующими значениями для вашей тестовой среды. Не пытайтесь проверить, работает ли ConfigurationManager или SqlConnection. Вы просто будете создавать код, который нужно поддерживать, но на самом деле он не проверяет какой-либо производственный код, который вы пишете.

Человек, посмотрите на: http://nunit.net/blogs/?p=9

Как ему подсказать я положил MyProjectTests.dll.config в корне проекта и все работает.

Пример моего конфигурационного файла:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
     <add key="TestKey" value="Ok!"/>
</appSettings>
</configuration>

И я использую простое: ConfigurationManager.AppSettings["TestKey"];

У меня была такая же ситуация, и я попытался добавить app.config в проект NUnit, но проект не смог его идентифицировать. Сложным обходным решением для меня было создание библиотеки классов, содержащей конфигурацию приложения, и превращение ее в мой тестовый проект. В конце концов, все NUnit и его адаптер представляют собой пакеты NuGet, которые могут быть добавлены для тестов в библиотеку классов, и тесты отлично работают с помощью Visual Studio и Resharper.

И, наконец, отладил мой тест и получил значение от App.config файл в моем тестовом проекте:

Другие вопросы по тегам