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