Подтвердить что ты не робот

Проблема с 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 в тестах?

4b9b3361

Ответ 1

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

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

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

Ответ 2

  • Перейдите в раздел NUnit/Project/Edit...
  • В панели "Свойства конфигурации" перейдите в "Имя файла конфигурации"
  • Поместите туда yourAssemblyName.dll.config

NB: если не работает, попробуйте добавить к нему путь, например. 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>

Ответ 3

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

Ответ 4

Тестирование вашего устройства должно продолжаться до тех пор, пока у вас есть такая же конфигурация для вашего тестового проекта, как и для вашего основного проекта.

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

Посмотрите на человека: 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"];

Ответ 8

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

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

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

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