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

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

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

Мои настройки NCover:

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

Рабочая папка
C: \ Documents and Settings \ MyProfile \ My Documents \ Visual Studio 2008 \ Projects \ XYZ \ XYZ.CoreTest \ bin \ Debug

Аргументы приложения
/ noisolation / testcontainer: "C: \ Documents and Settings \ MyProfile \ My Documents \ 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. Конфиг ».

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


person Larsenal    schedule 27.01.2009    source источник
comment
Связано: stackoverflow.com/questions/4811778/mstest-and -app-config-issue (содержит возможное решение)   -  person Lauri Harpf    schedule 02.07.2015


Ответы (9)


От Крейга Стунца в комментарии на текст ссылки

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

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

  2. Нажмите "Добавить", "Новый элемент".

  3. В разделе "Категории" выберите "Конфигурация тестового прогона".

  4. Теперь выберите пункт Test Run Configuration и добавьте его в свой проект.

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

  6. Щелкните элемент Развертывание

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

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

person Lucas B    schedule 06.08.2010
comment
1000 Спасибо! Это спасло мне день с небольшой адаптацией. В VS2010 конфигурация тестового запуска называется настройками теста. Тогда добавление файла конфигурации помогло мне. - person Marcel; 19.04.2011
comment
В 2010 году это для меня ничего не дает. По-прежнему нет решения этой проблемы. Я не могу остановить его чтение из каталога / IDE /. - person BradLaney; 18.07.2011

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

person Greg Ogle    schedule 29.01.2009
comment
После этого (переименованный) app.config находится в моей выходной папке рядом со сборкой ... что он и делал. Мое приложение все еще пытается прочитать MSTest.exe.config, а не MyAssembly.dll.config. Если я опущу переключатель / noisolation, он читает правильный файл. - person Larsenal; 30.01.2009
comment
Просто столкнулся с той же проблемой, и это сработало для меня. Спасибо! - person Dan Puzey; 14.09.2011
comment
легкий путь! +1 - person Vielinko; 22.02.2018

На 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. Возможно, это сработает.

person Greg Ogle    schedule 30.01.2009
comment
Похоже, ссылка изменена на docs.ncover.com/ref/2-0/whats-new-in-ncover-2-0/ - person Regent; 07.05.2010

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

person Ufuk Hacıoğulları    schedule 01.10.2015

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

person MrTelly    schedule 30.01.2009

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

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

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

person Greg Ogle    schedule 29.01.2009
comment
Если это так, то, возможно, мой настоящий вопрос связан с тем, как заставить NCover правильно работать с MSTest.exe без / noisolation. - person Larsenal; 30.01.2009
comment
Просто несколько идей; извините, что они звучат критически. Не намеренно. Если вы используете командную систему, возможно, вы могли бы использовать покрытие кода от taht? blogs.vertigosoftware.com/teamsystem/archive/2006/02/ 06 / - person Greg Ogle; 30.01.2009

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

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

person Dominic Hopton    schedule 14.02.2009

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

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

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

person Mockingbird    schedule 22.08.2016

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

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

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

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

person Randolpho    schedule 30.01.2009
comment
То, что я делаю, вероятно, лучше охарактеризовать как интеграционное тестирование, а не модульное тестирование. В этом конкретном случае мне нужно задним числом добавить несколько тестов в существующую базу кода. - person Larsenal; 30.01.2009
comment
О, ненавижу это делать! Ах, ну, я поддерживаю свое утверждение ... если у вас есть возможность реорганизовать свой код, чтобы сделать его более тестируемым, сделайте это. Если у вас связаны руки, ваши руки связаны. Кроме того, если вы можете, подумайте о насмешках над своими интеграциями, это сделает для вас чудеса позже. - person Randolpho; 30.01.2009