Конфигурационный менеджер.GetSection (sectionName) возвращает null при выполнении модульных тестов


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

ConfigurationManager.GetSection(sectionName)
Однако, если я выполняю тесты из нескольких тестовых проектов, а другие тестовые проекты выполняются до соответствующего проекта, приведенная выше инструкция возвращает null. Если обсуждается тест проект выполняется как первый, нет проблем с загрузкой конфигурационного файла.

Как исправить загрузку конфигурационного файла в модульном тесте, чтобы он работал правильно?

4 5

4 ответа:

Ваша проблема не в ConfigurationManager.GetSection (sectionName) возвращает null, это как я могу протестировать некоторый код, содержащий ConfigurationManager.GetSection (имя раздела)?

И ответ: оберните его, впрысните его, а затем для вашего теста издевайтесь над ним.

У вас есть несколько примеров ставропольчанами сталкивается с теми же выпуск:

(второй гораздо более детализирован, но идея все та же).

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

Столкнувшись с той же проблемой, это решило ее: app.config следует подобрать внутри модульного теста, если это свойство Copy to Output Directory установлено в Copy if newer или если вы добавляете атрибут DeploymentItem [DeploymentItem("your.config")].

Более подробное описание: http://social.msdn.microsoft.com/Forums/en-US/3e520735-8ced-4092-b681-38b69e0db534/unit-test-configuration#32998bf4-5a76-4083-99da-42f0c3a91559

Аналогичный вопрос: MSTest и app.config issue

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

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

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = @"d:\test\test.config";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

Я использовал командную строку test project post build, но не забудьте построить проект, если есть изменения:

copy /Y "$(SolutionDir)$(SolutionName)\App.Debug.config" "$(TargetDir)$(ProjectName)$(TargetExt).config"