ConfigurationManager.GetSection(sectionName)在执行单元测试时返回null

sgn*_*gon 6 .net c# configuration nunit configurationmanager

我有一个单元测试项目,它有自己的app.config文件,它是由正在测试的目标项目定义的真实配置文件的模拟.这个模拟文件由单元测试代码(而不是目标项目)加载和处理,如果我只在这个测试项目中运行测试,它就能正常工作.

ConfigurationManager.GetSection(sectionName)
Run Code Online (Sandbox Code Playgroud)

但是,如果我从多个测试项目运行测试,并且在相关项目之前执行其他测试项目,则返回上述语句null.如果首先执行讨论的测试项目,则加载配置文件没有问题.

如何在单元测试中修复配置文件的加载才能正常工作?

Oua*_*rzy 8

你的问题不是ConfigurationManager.GetSection(sectionName)返回null,它是如何测试包含ConfigurationManager.GetSection(sectionName)的一些代码的?

答案是:包装它,注入它,然后为你的测试模拟它.

您有几个面临相同问题的人员示例:

(第二个更详细,但想法仍然相同).

无论如何,这是合乎逻辑的,你不能在单元测试中使用来自app.config的信息,因为app.config是整个应用程序的上下文,当需要编写绝对独立的测试时.如果直接使用app.config值,则表示您具有非逻辑耦合.