【发布时间】:2014-08-10 01:19:31
【问题描述】:
我有一个 C# 单元测试项目,在 app.config 文件中有应用程序设置。我正在测试一个存在于不同项目中的类。该类取决于ConfigurationManager.AppSettings 和ConfigurationManager.ConnectionStrings。
正在测试的类所在的项目没有 app.config 文件。我会认为因为该类是在单元测试项目的上下文中实例化的,所以它将使用单元测试项目的 app.config 文件。实际上,连接字符串似乎确实如此。
该类检索连接字符串没有任何问题。但是,当类尝试检索任何应用程序设置时,配置管理器总是返回null。这是怎么回事?
编辑 1
我认为尝试在测试项目中加载一些设置以查看会发生什么可能是个好主意。在调用实例化外部项目中的类的代码之前,我尝试立即在单元测试中加载设置。同样的结果,没有。我想我可以暂时从等式中排除其他项目。
这是我的配置文件的摘录:
<configSections>
<sectionGroup name="applicationSettings"
type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="MyNamespace.Properties.Settings"
type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
</sectionGroup>
</configSections>
...
<applicationSettings>
<MyNamespace.Properties.Settings>
<setting name="Bing_Key"
serializeAs="String">
<value>...</value>
</setting>
</MyNamespace.Properties.Settings>
</applicationSettings>
这是我尝试加载设置的方式:
string test = System.Configuration.ConfigurationManager.AppSettings["Bing_Key"];
【问题讨论】:
-
您是否检查过 App.config 文件上的构建操作需要为 Content 并且“复制到输出目录”设置需要为“如果较新则复制”。
-
这些东西都没有像你描述的那样设置。更改它们并没有解决问题。
-
在您的
app.config中,配置部分的类型和命名空间是否与 CM.AppSettings 命名空间匹配? -
您是否复制了appSettings部分并粘贴到单元测试项目的app.config中?
-
您是否尝试过将常规项目的配置文件作为链接添加到测试项目中?测试项目是否有对 System.Configuration 的引用?
标签: c# visual-studio unit-testing app-config application-settings