Строки подключения недоступны из App.Config в модульных тестах, выполняемых в TFS 2015.

У меня есть несколько модульных тестов БД, которые берут строку подключения из файла app.config. Я беру строки через класс ConfigurationManager.

var conString = ConfigurationManager.ConnectionStrings["DB"].ConnectionString;

Тесты работают нормально на машине разработчика, но не на TFS. Ошибка нулевой ссылки. Если я просто заменю строку подключения в модульном тесте на жестко закодированную строку, идентичную строке в app.config, тогда тест сработает. О да, и я убедился, что для app.config установлено значение «копировать в выходную папку».

Есть ли известная проблема с TFS и ConfigurationManager?

помпон


person Pompair    schedule 27.01.2016    source источник
comment
Можете ли вы показать свой код, где вы пытаетесь получить строку подключения?   -  person P. Jairaj    schedule 27.01.2016
comment
@P.Jairai: это код вопроса.   -  person Pompair    schedule 27.01.2016


Ответы (3)


Недавно я столкнулся с той же проблемой с TFS 2015 (локально с обновлением 2). У нас есть несколько тестовых проектов, которые обращаются к строке подключения из файла app.config, однако одному конкретному проекту не удалось получить доступ к строке подключения, что привело к сбою нашей сборки.

Я изменил файл .csproj, чтобы он соответствовал другим рабочим тестовым проектам, но это не дало никакого успеха, вместо этого у меня сработало следующее:

  1. Скопировал содержимое App.config в блокнот.
  2. Удален файл App.config из проекта
  3. В проект добавлен новый файл конфигурации приложения (App.config).
  4. Вставил содержимое из блокнота в новый файл App.confg
  5. Right click the App.config file and altered its properties:
    • Build Action: Content
    • Копировать в выходной каталог: Копировать всегда

После регистрации все модульные тесты в рамках проекта прошли успешно.

Это странное решение, но оно запустило наши тесты.

Примечание. Удаление файла App.config было необходимым шагом. Изменение свойств файла (перед удалением файла) не имело значения.

Обновлять:

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

  • В нашей задаче сборки Visual Studio мы используем следующий параметр в наших аргументах сборки MS:

    /p:OutDir=$(Build.StagingDirectory)

  • Наша тестовая задача Visual Studio была настроена на поиск тестовой сборки в следующем расположении:

    **\$(BuildConfiguration)\*test*.dll;-:**\obj\**

Изменение местоположения тестовой сборки на следующее все исправило:

$(Build.StagingDirectory)\*test*.dll;-:**\_PublishedWebsites\**

Больше никаких проблем с файлами App.config, а модульные тесты запускались только один раз.

person BMuuN    schedule 27.05.2016

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

person Pompair    schedule 27.01.2016

Мой тестовый проект — это отдельный проект от основного проекта. Поэтому ему нужна собственная копия App.config. Следуйте инструкциям в предыдущем ответе, чтобы добавить новый файл конфигурации приложения и дать ему то же содержимое, что и в вашем основном проекте.

person Jeffrey Hook    schedule 28.12.2017
comment
добро пожаловать в СО. в предыдущем ответе немного расплывчато, на какие шаги ссылается ОП? - person navicore; 28.12.2017