C# 单元测试时无法读取appsettings
我有一个C#控制台应用程序。它的一个函数读取C# 单元测试时无法读取appsettings,c#,unit-testing,nunit,C#,Unit Testing,Nunit,我有一个C#控制台应用程序。它的一个函数读取appconfig值并做一些工作 string host = ConfigurationManager.AppSettings["Host"] 所以我为我的控制台应用程序编写了NUNITtest。单元测试项目是使用类库创建的 但是我的单元测试现在失败了。因为它没有读取我的应用程序设置(表示没有应用程序设置)。原因是什么。 当我运行我的控制台应用程序时,它正在正确读取应用程序设置 应该为单元测试项目创建app.config。运行单元测试时,将不会查
appconfig
值并做一些工作
string host = ConfigurationManager.AppSettings["Host"]
所以我为我的控制台应用程序编写了NUNIT
test。单元测试项目是使用类库创建的
但是我的单元测试现在失败了。因为它没有读取我的应用程序设置(表示没有应用程序设置)。原因是什么。当我运行我的控制台应用程序时,它正在正确读取应用程序设置 应该为单元测试项目创建app.config。运行单元测试时,将不会查阅控制台应用程序的app.config。虽然您可以在另一个配置文件中为单元测试项目定义应用程序设置,使用依赖项注入对接口进行单元测试可能有助于将单元测试将要覆盖的区域分解为更易于管理的部分 因此,您可以使用如下配置界面:
public interface IConfiguration
{
public string Host { get; set; }
}
要测试的类将接受IConfiguration类作为参数(通常用于构造函数),如下所示:
public class MyClass
{
IConfiguration _config;
public MyClass(IConfiguration config)
{
_config = config;
}
public void MyMethodToTest()
{
}
}
然后,您的测试可以使用接口传递配置,而不是依赖可能更改并影响单元测试的外部配置文件:
[Test]
public void Testing_MyMethodToTest()
{
// arrange
var config = new Configuration { Host = "My Test Host" };
// act
new MyClass(config).MyMethodToTest();
// Add assertion for unit test
}
您的实际实现将创建您的配置类,使用appsettings中的值加载它,并将其传递到您的实现中如果您只使用相同的文件,另一个解决方案可以非常简单,只需将所有应用设置json文件复制到单元测试项目的build文件夹中即可。有时在Rider中,它只是没有复制,我必须手动执行。这似乎是Visual Studio版本的问题。我在不同版本的VisualStudio中打开了相同的项目
- VS 2017->appsettings未找到
- VS 2019(16.4.0)->找到应用程序设置
这意味着我还必须在测试项目中添加以下内容<代码>但是他的实现仍然需要从测试项目中的应用程序设置加载到他的配置中。添加了如何编写不需要应用程序设置的测试的示例