Проблема с 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
тестируемой системы на тестовый проект в качестве ссылки, таким образом любые изменения происходят в обоих проектах.
- Перейти к NUnit/Project/Edit...
- В панели свойств конфигурации перейдите к имени файла конфигурации
- Поместите туда 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 применяется то же правило.
Ваши модульные тесты должны работать, пока у вас есть такая же конфигурация для вашего тестового проекта, как и для вашего основного проекта.
Я бы предложил использовать событие предварительной сборки в вашем тестовом проекте, чтобы скопировать файл конфигурации вашего приложения в тестовый проект. Это избавляет от необходимости поддерживать два набора конфигурации.
скопировать $(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
файл в моем тестовом проекте: