Конфигурационный менеджер.GetSection (sectionName) возвращает null при выполнении модульных тестов
У меня есть проект модульных тестов с собственным файлом app.config
, который является макетом реального конфигурационного файла, определенного тестируемым целевым проектом. Этот макет файла загружается и обрабатывается кодом модульного теста (а не целевым проектом), и он работает правильно, если я запускаю только тесты только в этом тестовом проекте.
ConfigurationManager.GetSection(sectionName)
Однако, если я выполняю тесты из нескольких тестовых проектов, а другие тестовые проекты выполняются до соответствующего проекта, приведенная выше инструкция возвращает null
. Если обсуждается тест проект выполняется как первый, нет проблем с загрузкой конфигурационного файла.
Как исправить загрузку конфигурационного файла в модульном тесте, чтобы он работал правильно?
4 ответа:
Ваша проблема не в ConfigurationManager.GetSection (sectionName) возвращает null, это как я могу протестировать некоторый код, содержащий ConfigurationManager.GetSection (имя раздела)?
И ответ: оберните его, впрысните его, а затем для вашего теста издевайтесь над ним.
У вас есть несколько примеров ставропольчанами сталкивается с теми же выпуск:
- http://chrisondotnet.com/2011/05/configurationmanager-wrapper-for-unit-testing/
- http://weblogs.asp.net/rashid/archive/2009/03/03/unit-testable-configuration-manager.aspx
(второй гораздо более детализирован, но идея все та же).
В любом случае, это вполне логично, что вы не можете использовать информацию из приложения.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);