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

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

30 голосов
/ 09 марта 2010

Когда я запускаю простой тест на проверку соединения с БД, я получаю сообщение об ошибке в 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 ]

26 голосов
/ 09 марта 2010

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

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

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

5 голосов
/ 01 мая 2014
  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>
4 голосов
/ 29 октября 2013

Я хотел бы добавить точку. В документации по 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

3 голосов
/ 09 марта 2010

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

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

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

1 голос
/ 14 октября 2011

Человек взглянет на: 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"];

1 голос
/ 28 апреля 2011

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

1 голос
/ 09 марта 2010

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

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

0 голосов
/ 07 марта 2017

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

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

Также мы можем настроить это в предварительных сборках, как показано ниже

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