[英]ConfigurationManager.GetSection(sectionName) returns null while performing unit tests
我有一个单元测试项目,它有自己的app.config
文件,它是由正在测试的目标项目定义的真实配置文件的模拟。 这个模拟文件由单元测试代码(而不是目标项目)加载和处理,如果我只在这个测试项目中运行测试,它就能正常工作。
ConfigurationManager.GetSection(sectionName)
但是,如果我从多个测试项目运行测试,并且在相关项目之前执行其他测试项目,则上述语句将返回null
。 如果首先执行讨论的测试项目,则加载配置文件没有问题。
如何在单元测试中修复配置文件的加载才能正常工作?
你的问题不是ConfigurationManager.GetSection(sectionName)返回null,它是如何测试包含ConfigurationManager.GetSection(sectionName)的一些代码的?
答案是:包装它,注入它,然后为你的测试模拟它。
您有几个面临相同问题的人员示例:
(第二个更详细,但想法仍然相同)。
无论如何,这是合乎逻辑的,你不能在单元测试中使用来自app.config的信息,因为app.config是整个应用程序的上下文,当需要编写绝对独立的测试时。 如果直接使用app.config值,则表示您具有非逻辑耦合。
面对同样的问题,这解决了它:如果将Copy to Output Directory
属性设置为Copy if newer
[DeploymentItem("your.config")]
Copy if newer
或者添加DeploymentItem属性[DeploymentItem("your.config")]
则应该在单元测试中拾取app.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问题
我认为问题是它无法在测试工作目录中找到该文件或文件本身无法加载。
我通过显式加载配置文件名称解决了这个问题。 在你的情况下,你可以尝试相同的。
ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = @"d:\test\test.config";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
我使用了测试项目post build命令行,但是如果有更改,请记得构建项目:
copy /Y "$(SolutionDir)$(SolutionName)\App.Debug.config" "$(TargetDir)$(ProjectName)$(TargetExt).config"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.