Я застреваю, пытаясь автоматизировать тесты единичных тестов с MSTest и развертывание app.config. Я прочитал несколько сообщений и блогов, попробовал несколько вещей, и все же app.config, похоже, не подбирается во время выполнения MSTest. Имея DLL, которая содержит все мои модульные тесты, созданные с помощью msbuild, вот что я пробовал...
Попытка 1
- Скопированный app.config в том же месте с MyTests.dll как MyTests.dll.config(на одном из форумов msdn было сказано, что оно будет автоматически загружено)
- Добавлен атрибут
[DeploymentItem("MyTests.dll.config")]
для каждого теста - Ran
MSTest.exe /noisolation /testcontainer:d:\MyTestTests.dll /test:MyTest
Попытка 2
- Создан файл local.testrunconfig со следующим содержимым (ниже)
- Ran mstest с /runconfig и без изоляции, но ничего не было выполнено:
MSTest.exe /runconfig:d:\local.testrunconfig /testcontainer:d:\MyTestTests.dll /test:MyTest
Результат:
Загрузка d:\local.testrunconfig...
d:\local.testrunconfig
d:\local.testrunconfig
... и ничего не происходит: ошибок нет, никаких тестов не выполняется!
EDIT/RESOLUTION: По умолчанию 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);