MSTest.exe не найден app.config - PullRequest
       39

MSTest.exe не найден app.config

19 голосов
/ 27 января 2009

В настоящее время я пытаюсь запустить 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 \ Мои документы \ 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. Это просто ужасно портативно.

Ответы [ 9 ]

12 голосов
/ 06 августа 2010

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

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

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

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

  3. В категориях выберите Конфигурация тестового прогона

  4. Теперь выберите элемент «Конфигурация тестового запуска» и добавьте его в свой проект

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

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

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

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

5 голосов
/ 29 января 2009

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

2 голосов
/ 01 октября 2015

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

2 голосов
/ 30 января 2009

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

1 голос
/ 30 января 2009

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

0 голосов
/ 22 августа 2016

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

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

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

0 голосов
/ 14 февраля 2009

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

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

0 голосов
/ 30 января 2009

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

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

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

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

0 голосов
/ 30 января 2009

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

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

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

...