xUnit单元测试项目无法读取App.config文件

5
我有一个带有xUnit的.NET Framework 4.5.2单元测试项目。在我的单元测试项目中,我有一个与我的Web.config相同的App.config文件,并有相同的appSettings。
当我运行我的测试时,ConfigurationManager.AppSettings[]总是返回null,这表明它没有读取App.config文件。
在bin目录中查看,我可以看到一个MyProject.Tests.UnitTests.dll.config文件,它似乎具有与我的App.config相同的内容。
这是否是xUnit的一个bug?我需要进行任何xUnit配置才能使ConfigurationManager工作吗?
3个回答

3
如果你发现了这个问题,不幸的是这可能不是你要找的答案,但是我通过使用 NUnit 而不是 XUnit 解决了这个问题。
在尝试解决这个问题时,我决定创建一个实现 IConfiguration 接口的 Configuration 类,并将其注入到任何想要获取 AppSettings 的地方。然后我遇到了另一个问题,我的模拟无法设置,给了我这个 issue。在那一点上,我放弃了并切换了,我的测试立即工作了。
最终问题似乎是使用 Resharper、XUnit 和 .NET Framework 的组合问题。

令人失望。xUnit 有自己的属性机制可供使用,但我也想使用 App.Config,因为使用我的库的应用程序将必须这样工作,我希望在测试期间模拟这种情况。 - Zeek2

0

0
经过一番研究和实验,我找到了一种方法来让xUnit在我的需求下工作。我并没有创建一个新的app.config文件,而是将我的设置放在VS自动创建的.config文件中,它位于我的bin\debug文件夹中,对我来说它被称为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”和使用的项目(Test)可能都很关键(?)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接