单元测试时无法读取appsettings

时间:2013-06-06 06:28:27

标签: c# unit-testing nunit

我有C#控制台应用程序。它的一个功能是读取appconfig值并做一些工作。

string host = ConfigurationManager.AppSettings["Host"]  

所以我为我的控制台应用程序编写了NUNIT测试。单元测试项目是使用类库创建的。

但我的单元测试现在失败了。因为它没有读取我的应用程序设置(表示没有应用程序设置)。这是什么原因。 当我运行我的控制台应用程序时,它正确地读取应用程序设置。

4 个答案:

答案 0 :(得分:32)

您应该为您的单元测试项目创建一个app.config。在运行单元测试时,不会查询控制台应用程序的app.config。

答案 1 :(得分:11)

虽然您可以在单元测试项目的另一个配置文件中定义应用程序设置,但使用依赖项注入对接口进行单元测试可能有助于将单元测试覆盖的区域分解为更易于管理的部分。

所以你可以使用你的配置界面:

public interface IConfiguration
{
    public string Host { get; set; }
}

你要测试的类会接受一个I​​Configuration类作为参数(通常是你的构造函数),如下所示:

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中的值加载它并将其传递到您的实现中

答案 2 :(得分:0)

如果只是使用相同的文件,另一种解决方案可以简单地将所有应用程序设置json文件复制到单元测试项目的build文件夹中。有时在Rider中,它只是没有复制,我已经手动完成了。

答案 3 :(得分:0)

似乎是Visual Studio版本问题。我已经在不同版本的Visual Studio中打开了同一项目。

  • VS 2017->找不到应用设置
  • VS 2019(16.4.0)->找到应用设置

VS2019屏幕截图,如您所见,测试和应用程序设置位于不同的文件夹中。

VS2019, as you can see the Test and the appsettings are placed in different folders.