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

MSTest.exe не находит app.config

В настоящее время я пытаюсь запустить MSTest.exe из NCover, но я считаю, что этот вопрос может вообще применяться к запуску MSTest.exe из командной строки.

Если у меня есть аргумент "/noisolation", значит, MSTest.exe, как ожидается, найдет и использует app.config. Без него NCover не фиксирует информацию о покрытии. Из моих исследований до сих пор, кажется, нужен NCover/noisolation. Поэтому вопрос заключается в том, как заставить мои файлы *.config работать, когда этот аргумент передан.

Настройки моего NCover:

Приложение к профилю
C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\MSTest.exe

Рабочая папка
C:\Documents and Settings\MyProfile\Мои документы \Visual Studio 2008\Projects\XYZ\XYZ.CoreTest\bin\Debug

Аргументы приложения
/noisolation/testcontainer: "C:\Documents and Settings\MyProfile\Мои документы \Visual Studio 2008\Projects\XYZ\XYZ.CoreTest\bin\Debug\XYZ.CoreTest.dll"



Обновление: я добавил трассировку, показывающую, что моя конфигурация (неудивительно) пытается прочитать из "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\MSTest.exe.Config".

Обновление 2: если это вообще возможно, я не хочу редактировать MSTest.exe.Config. Это просто не очень портативно.

4b9b3361

Ответ 1

От Craig Stuntz в комментарии на текст ссылки

Как сделать это с помощью MSTest.

  • В обозревателе решений щелкните правой кнопкой мыши Solution (а не Project).

  • Нажмите "Добавить", "Создать элемент"

  • В разделе "Категории" выберите "Проверить запуск конфигурации"

  • Теперь выберите элемент конфигурации тестового запуска и добавьте его в свой проект

  • В обозревателе решений дважды щелкните выбранную конфигурацию тестового запуска

  • Нажмите элемент "Развертывание"

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

Мне потребовалось немного времени, чтобы понять, но я в подобной ситуации, и это работает для меня.

Ответ 2

В визуальной студии отметьте файл App.config для свойства CopyAlways. (щелкните правой кнопкой мыши по файлу, выберите свойства для доступа к панели свойств)

Ответ 3

В http://docs.ncover.com/ref/2-0/whats-new-in-ncover-2-0/release-notes-for-ncover-2-1-0/ в установках NCover:

Запуск покрытия на MSTest больше не требует флага "/noisolation". NCover правильно собирает покрытие

Если это действительно исправлено, обновите NCover до 2.1.0. Возможно, это сработает.

Ответ 4

Там есть техника, в которой вы можете объединить содержимое конфигурационных файлов, которые он подробно описывает здесь. Вы можете добавить строку фиксированного файла в файл MSTest.exe.Config, а затем скопировать приложение app.config в это фиксированное местоположение файла. Это уродливо, но более переносимо, чем взломать MSTest.exe.Config для каждой другой возможности.

Ответ 5

У меня была такая же проблема в сборках Jenkins с плагин MSTestRunner. Проверка "Отключить NoIsolation" со страницы конфигурации решила проблему.

Ответ 6

Я никогда не использовал NoIsolation, но если я правильно понимаю, он буквально запускает весь ваш тестовый код в классе MSTest. Таким образом, он делает и должен читать конфигурацию приложения для MSTest. Если вы настаиваете на использовании noisolation, я думаю, вам придется объединить ваш App.config в MSTest.exe.config. Конечно, это взлом.

Вероятно, было бы лучше избегать шумоподавления. Если это связано с ошибкой, исправьте ошибку, если это возможно. Работайте над ошибкой, если реорганизация (основной рефакторинг) вашего приложения невозможна. Я не уверен, что есть изящная альтернатива.

Я нашел: "Я думаю, нам нужно найти основную причину этой проблемы, чтобы избежать переключения noisolation. Возможно, вам придется изменить свое приложение. Возможно ли создать простое решение, которое воспроизводит ту же проблему?" на этот URL.

Ответ 7

Чтобы устранить путаницу: не используя /noisolation = если он находит файл SameNameAsYourDll.dll.config, он будет автоматически развернут с тестовой dll и будет использоваться для конфигурации приложения для домена приложения, который запускает тесты в этой сборке

using/noisolation = Вся изоляция, которую мы делаем между тестами, вы, хост-процесс и все остальное выходите из окна. Мы все еще можем сделать некоторую изоляцию, но вы не получаете дополнительного преимущества домена приложения, уникального для вашей тестовой dll. Таким образом, вам не поможет dll config.

Ответ 8

Попробуйте изменить его имя от app.config до projectname.extension.**config**

Например, если у вас есть проект unit test с именем proj1 и вы используете его dll, переименуйте app.config в proj1.dll.config

Это сработало для меня.

Ответ 9

Хорошо, я рискую, что мой пост перейдет в модульное тестирование flamewar, но я думаю, что проблема заключается в ваших тестах и, возможно, даже в вашем коде. Вы должны реорганизовать.

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

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

Если вам нужен ваш app.config для строки подключения к базе данных, вы сами по себе. DALs, как известно, трудно unit test. Если это для строки подключения к веб-сервису, не используйте ее - обманите интерфейс.