【问题标题】:xUnit Unit Test project not reading App.configxUnit 单元测试项目未读取 App.config
【发布时间】:2018-12-11 17:01:47
【问题描述】:

我有一个带有 xUnit 的 .NET Framework 4.5.2 单元测试项目。在我的单元测试项目中,我有一个 App.config 文件,其 appSettings 与我的 Web.config 相同。

当我运行测试时,ConfigurationManager.AppSettings[<keyname>] 总是返回 null - 表示它没有读取 App.config 文件。

查看bin 目录,我可以看到我有一个MyProject.Tests.UnitTests.dll.config 文件,它的内容似乎与我的App.config 相同。

这是 xUnit 的错误吗?我是否必须进行任何 xUnit 配置才能使 ConfigurationManager 工作?

【问题讨论】:

    标签: .net unit-testing xunit


    【解决方案1】:

    如果您偶然发现了这个问题,那么很遗憾,这可能不是您正在寻找的答案,但是我通过使用 NUnit 而不是 XUnit 解决了这个问题。

    为了解决这个问题,我决定创建一个实现IConfiguration 接口的Configuration 类,并将其注入到我想要获取AppSettings 的任何位置。然后我遇到了另一个问题,我的模拟无法设置,给了我这个issue。那时我只是放弃并切换,我的测试立即生效。

    最终问题似乎是使用 Resharper、XUnit 和 .NET Framework 的组合。

    【讨论】:

    • 令人失望。 xUNit 有自己可以使用的属性机制,但我也想使用 App.Config,因为它使用我的库的应用程序必须如何工作,我想在测试期间模拟它。
    【解决方案2】:

    经过一些研究和实验后,我找到了一种方法来使用 xUnit 满足我的需要。我没有创建新的 app.config,而是将我的设置放在 VS 自动在我的 bin\debug 文件夹中创建的 .config 文件中,对我来说,它被称为 MyDLL.Tests \bin\Debug\net472\MyDLL.Tests.dll.config。很简单,它立即开始工作。

    详情: 我为我的设置添加了这个部分,就在最终标签之前。

    <appSettings>
        <add key="ExpireMins" value="5" />
    </appSettings>
    

    更新: 更好,我在 VS2017 中找到了上述方法:

    1. 在解决方案资源管理器中选择测试项目
      1. 添加 > 新项目... > 应用程序配置文件并将其命名为“App.config”。
      2. 将您的设置(例如,参见上面的 XML)添加到 App.config。
      3. 清理并重建解决方案。您的新设置现在应该出现在 DLL.configs 中! :)

    注意:由于某种原因,上述方法第一次对我不起作用。使用的名称“App.config”和项目(测试)可能都是关键的(?)。

    【讨论】:

      【解决方案3】:

      对我来说,通过将我的测试项目从面向 .NET Framework 4.5 升级到 4.5.2 似乎解决了这个问题。

      问题似乎与此有关: Running xunit.net tests in VSTS

      如果您确实遵循此方法,请注意其他注意事项,例如 Console.WriteLine() 在 xUnit 2.x 中不起作用: Using ReSharper, how to show debug output during a long-running unit test?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-15
        • 2011-08-09
        • 2011-05-05
        • 2018-07-17
        • 1970-01-01
        • 2014-04-19
        • 1970-01-01
        • 2014-03-23
        相关资源
        最近更新 更多