【问题标题】:Unable to Retrieve Values from App.config无法从 App.config 检索值
【发布时间】:2019-01-23 11:29:33
【问题描述】:

我已经建立了一个测试项目,就像我通常在项目的根目录中使用 App.config 文件一样。然后我为不同类型的测试设置文件夹,例如服务测试等

我在该文件夹中的一个文件中进行了第一组测试,并尝试引用 App.config 中的 appSettings 部分,但没有得到任何回复。我尝试了以下方法:

var setting = ConfigurationManager.AppSettings["MySetting"];

以及更广泛的:

var settings = ConfigurationManager.GetSection("appSettings") as AppSettingsSection;

在这两种情况下,我都会返回 null。有人有什么建议吗?

【问题讨论】:

  • 你应该模拟配置设置,你不应该需要 app.config 进行单元测试
  • @EhsanSajjad - 这些是基本的集成测试,所以需要像端点这样的东西来命中。

标签: c# unit-testing integration-testing app-config configurationmanager


【解决方案1】:

配置管理器不读取 DLL 的 app.config,只读取正在运行的可执行文件(在本例中为测试运行程序)。因此,您的测试程序集的 app.config 没有被找到/使用。

您必须手动查找和加载 XML 并自行解析。

或者,为了对单元测试更友好,将系统配置隐藏在您自己的界面/服务后面,使用主应用程序中的 app.config 设置,并在单元测试中使用测试特定设置对其进行模拟

【讨论】:

  • 所以你是说应该找到我的 app.config 但由于某种原因不是?正如我在问题中所说,我经常以这种方式设置我的测试项目,我只需在测试项目中创建一个 app.config 文件并将相关设置放入以从主项目的 web.config 运行测试。我想知道为什么现在这似乎不起作用。
  • 所以这是一个网络项目?那可能会有所不同,我对它们不太熟悉。一般来说,虽然单元测试项目只是构建一个 DLL,而配置框架从不支持读取 DLL 的 app.config。在构建时,可执行文件的 app.config 被转换为“myapp.exe.config”,这就是使用的内容。 Web 应用程序可能会做不同的事情。就我个人而言,我不在我的测试项目中使用 app.config,我模拟一个配置服务并通过另一种机制提供测试配置。
  • 当您说您通过“另一种机制”提供测试配置时,您是什么意思?我问的原因是我在测试中模拟了我的 IApplicationSettings 接口。然后,我只是尝试通过从测试项目中的 app.config 中提取字符串(端点 url)来设置对象的元素。我可以在测试设置中将它们设置在那里,但只是想知道为什么这真的不起作用。
  • 我会这样做,将其模拟出来并在测试中替代。我可能只是将测试端点烘焙到测试中,它使事情变得简单。至于为什么它不起作用,我会对它以前为什么起作用感兴趣。我不希望 app.config 像我说的那样从测试中读取,app.config 机制不适用于仅适用于 DLL 的可执行文件。如果您在 app.config 中为测试运行程序 exe 设置设置,那么您可以阅读它们。但是对于一个测试项目的 app.config,不知道它是如何工作的。
  • 您可以找到您的测试的当前工作目录(具体如何取决于您使用的测试框架),在那里查找 app.config 或您自己制作的其他配置文件,然后加载它并拉出配置,如果你想把它留在配置文件中。我喜欢将数据文件捆绑为嵌入式资源,并在设置时将它们提取到磁盘或内存中,以避免与数据位置相关的问题。
【解决方案2】:

我找到了您的答案here

“如果您正在进行单元测试,则需要在单元测试项目中复制一份 APP.CONFIG”

另外值得注意的是有人就同一问题提出的建议,因此您无需复制实际的配置文件:https://stackoverflow.com/a/11535980/2654498

【讨论】:

  • 感谢您的回答,但这个 App.config 在我的测试项目中
【解决方案3】:

您是否为文件设置了构建操作?

它应该设置为无并复制到输出目录。

另外,在输出文件夹中,您是否有一个名为 .dll.config 的文件?

【讨论】:

  • 已经有了这些设置。如果文件在同一个项目中,这些对能够访问文件有何影响?
猜你喜欢
  • 2016-11-02
  • 2011-01-11
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 2023-04-02
相关资源
最近更新 更多