【发布时间】:2018-07-17 22:03:06
【问题描述】:
我创建了一个简单的单元测试项目来读取 app.config 文件。目标框架是 Core 2.0。我还创建了一个 Core 2.0 控制台应用程序,对自己进行健全性检查,以确保我没有做任何奇怪的事情(与 .NET 4.6.1 单元测试项目中预期的相同的测试通过了)。
控制台应用程序可以正常读取 app.config,但单元测试方法失败,我无法弄清楚原因。两者都使用相同 app.config 的副本(未添加为链接),并且都安装了 System.Configuration.ConfigurationManager v4.4.1 NuGet 包。
App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Test1" value ="This is test 1."/>
<add key="Test2" value ="42"/>
<add key="Test3" value ="-42"/>
<add key="Test4" value="true"/>
<add key="Test5" value="false"/>
<add key="Test6" value ="101.101"/>
<add key="Test7" value ="-1.2345"/>
</appSettings>
</configuration>
单元测试
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Configuration;
namespace ConfigTest
{
[TestClass]
public class UnitTest1
{
[TestMethod()]
public void ConfigTest()
{
foreach (string s in ConfigurationManager.AppSettings.AllKeys)
{
System.Console.WriteLine(s);
System.Diagnostics.Debug.WriteLine(s);
}
//AllKeys.Length is 0? Should be 7...
Assert.IsTrue(ConfigurationManager.AppSettings.AllKeys.Length == 7);
}
}
}
控制台应用
using System;
using System.Configuration;
namespace ConfigTestApp
{
class Program
{
static void Main(string[] args)
{
foreach (string s in ConfigurationManager.AppSettings.AllKeys)
{
Console.WriteLine(s);
System.Diagnostics.Debug.WriteLine(s);
}
//Outputs 7 as expected
Console.WriteLine(ConfigurationManager.AppSettings.AllKeys.Length);
}
}
}
鉴于我对整个 .NET Core 世界还很陌生,我在这里做的事情是否完全不正确?我现在有点疯狂......
【问题讨论】:
-
您确定正确的 .config 与测试项目相关联,并且该测试项目没有您在测试中读取的自己的 .config?
-
ConfigurationManager.AppSettings[0];工作吗?
-
@PawełŁukasik - 我在整个解决方案目录中仅有的 2 个配置是您在上面看到的内容的副本(除了生成的 *.dll.configs)。属性窗口中列出的完整路径是我所期望的。
-
@MichaelEvanchik - 不。 ArgumentOutOfRangeException。
-
@MartinUllrich - 单元测试找到 0 个配置项(它应该找到 7 个 - 我将编辑代码以使其更清晰)。该应用程序按预期找到了所有 7 个。我是否正确理解了您的问题?
标签: c# unit-testing .net-core mstest app-config