2014-08-29 3 views
1

Я помогаю команде, чьи сборки начали сбой из-за сбоев теста.Откуда эта конфигурация?

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

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

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile 

Путь не указывает на файл TestProject.exe.config, но вместо этого указал на vstest.executionengine.x86.exe.Config по следующему адресу:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.x86.exe.Config 

Этот файл не содержит строк подключения на всех.

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

Имя: LocalSqlServer подключения:. Источник данных = \ SQLEXPRESS Интегрированное Security = SSPI; AttachDBFilename = | DataDirectory | aspnetdb.mdf; Пользователь Экземпляр = истина. Прекращение выполнения теста.

Это файл machine.config (kudos petelids).

Так что большой вопрос:

Почему vstest.executionengine.x86.exe.Config используется, а не app.config (во время выполнения TestProject.exe.config)? (Я могу догадаться, что это связано с тем, что запущен процесс - это тестовый бегун, но я считаю справедливым сказать, что вы ожидаете, что тестирующее средство предложит тестовому проекту использовать собственный конфигурационный файл, что обычно происходит).

+0

Как правило, может быть определено, что оно определено в реестре –

+1

Возможно, он исходит из файла machine.config? - '% windir% \ Microsoft.NET \ Framework \ [версия] \ config \ machine.config' или'% windir% \ Microsoft.NET \ Framework64 \ [версия] \ config \ machine.config' для 64-битного – petelids

+0

@ petelids - пятно сверху. Он использует это потому, что в 'vstest.executionengine.x86.exe.Config' нет строки соединения, поэтому почему же он использует' vstest.executionengine.x86.exe.Config', а не app.config для теста проект? – Fenton

ответ

0

MSTest проходит испытания в изолированном режиме, по умолчанию.

Решение этой проблемы состояло в том, чтобы добавить новый тестовый проект и перенести тесты на него.

Новый проект вел себя как все другие проекты, запуская тесты в изолированном процессе и используя файл app.config из тестового проекта.

Я делаю это причудой.

0

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

Это совершенно верно предположение при работе с NUnit , xUnit и т. д., но не с Microsoft Test Runners (MSTest и VSTest). Они просто игнорируют конфигурационный файл целевой сборки и используют собственную конфигурацию.

Есть два решения этой проблемы:

  • Изменение MSTest в NUnit или XUnit
  • Использовать пользовательский конфигурационный файл (не по умолчанию один)
+0

У меня создалось впечатление, что вам нужно явно передать флаг, чтобы тесты выполнялись под тем же процессом, что и MSTest, иначе он запускает их изолированно по умолчанию: '/ noisolation: запускать тесты в процессе MSTest.exe. Этот выбор повышает скорость тестового запуска, но увеличивает риск для процесса MSTest.exe. Http://msdn.microsoft.com/en-us/library/ms182489.aspx – Fenton

+0

Да, но он запустит новый процесс, который будет использовать свою собственную конфигурацию файл. – Novakov

Смежные вопросы