我有 C# 控制台应用程序。它的功能之一是读取appconfig
值并做一些工作。
string host = ConfigurationManager.AppSettings["Host"]
所以我NUNIT
为我的控制台应用程序编写了测试。单元测试项目是使用类库创建的。
但是我的单元测试现在失败了。因为它没有读取我的应用设置(表示没有应用设置)。这是什么原因。
当我运行我的控制台应用程序时,它正在正确读取应用程序设置。
我有 C# 控制台应用程序。它的功能之一是读取appconfig
值并做一些工作。
string host = ConfigurationManager.AppSettings["Host"]
所以我NUNIT
为我的控制台应用程序编写了测试。单元测试项目是使用类库创建的。
但是我的单元测试现在失败了。因为它没有读取我的应用设置(表示没有应用设置)。这是什么原因。
当我运行我的控制台应用程序时,它正在正确读取应用程序设置。
您应该为您的单元测试项目创建一个 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 文件复制到单元测试项目的构建文件夹中。有时在 Rider 中,它只是没有复制,我已经手动完成了。