Я застрял, пытаясь автоматизировать запуск модульных тестов с помощью MSTest и развертывания app.config. Я прочитал несколько постов и блогов, перепробовал несколько вещей и все же app.config, кажется, не обнаруживается во время выполнения MSTest. Имея dll, которая содержит все мои модульные тесты, построенные с помощью msbuild, вот что я попробовал ...
Попытка 1
- Скопировал app.config в ту же папку с MyTests.dll, что и MyTests.dll.config (на одном из форумов msdn было сказано, что он будет автоматически выбран)
- Добавлен атрибут
[DeploymentItem("MyTests.dll.config")]
для каждого теста
- Ран
MSTest.exe /noisolation /testcontainer:d:\MyTestTests.dll /test:MyTest
Попытка 2
- Создан файл local.testrunconfig со следующим содержимым (ниже)
- Запустил mstest с / runconfig и без изоляции, но ничего не было выполнено:
MSTest.exe /runconfig:d:\local.testrunconfig /testcontainer:d:\MyTestTests.dll /test:MyTest
Результат:
Загрузка d: \ local.testrunconfig ...
d: \ local.testrunconfig
d: \ local.testrunconfig
... и ничего не происходит: ошибок нет, тесты не выполняются!
РЕДАКТИРОВАНИЕ / РАЗРЕШЕНИЕ: По умолчанию MSTest выполняет тесты в отдельных процессах. В этом случае файл конфигурации выбирается автоматически, если он называется «dllname.dll.config». Однако трудно отлаживать тесты, выполняющиеся в отдельных процессах, если они выполняются вне VS. Ключ / noisolation используется, чтобы MSTest запускал все тесты в одном процессе. Однако в этом случае файл конфигурации теста NOT выбран. Вместо этого используется файл MSTest.exe.config, который находится в том же каталоге, что и MSTest. Чтобы решить эту проблему, файл конфигурации может быть загружен прагматически следующим образом:
ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = @"path to config file";
Configuration config =
ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);