我正在研究一个项目,我正在尝试将几个库从.NET Framework 4.5.2移植到.NET Core 2,并且我在单元测试中尝试读取遗留的app.config appsettings时遇到了一些问题.为了将问题减少到最低限度的再现方案,我在VS2017中创建了以下项目:
我有app.config文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="TestKey" value="20" />
</appSettings>
<configSections>
</configSections>
</configuration>
Run Code Online (Sandbox Code Playgroud)
和UnitTest1.cs文件:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Configuration;
namespace SimpleTestsUnits
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void FromConfigurationManager()
{
Assert.AreEqual("20", ConfigurationManager.AppSettings["TestKey"]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在构建此项目时,将生成SimpleTestsUnits.dll,并使用SimpleTestsUnits.dll文件的同一文件夹中的app.config文件的内容创建SimpleTestsUnits.dll.config.
因此,当我使用VS2017运行单元测试时,"TestKey"的值始终为null,如果我调试到ConfigurationManager.AppSettings,则没有加载密钥.
抛出异常:Microsoft.VisualStudio.TestPlatform.TestFramework.dll中的"Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException"Microsoft.VisualStudio.TestPlatform.TestFramework.dll中出现"Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException"类型的异常但未在用户代码中处理Assert.AreEqual失败.预期:<20>.实际:<(空)>.
我在这里错过了什么?这不应该有效吗?