【问题标题】:unable to read appsettings when unit testing单元测试时无法读取 appsettings
【发布时间】:2013-06-06 06:28:27
【问题描述】:

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

string host = ConfigurationManager.AppSettings["Host"]  

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

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

【问题讨论】:

    标签: c# unit-testing nunit


    【解决方案1】:

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

    【讨论】:

    • 这意味着我还必须在我的测试项目中添加以下内容。 <appSettings> <add key="Host" value="localhost"/> </appSettings>
    【解决方案2】:

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

    所以你可以有你的配置界面:

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

    【讨论】:

    • 但是他的实现仍然需要从测试项目的应用设置中加载到他的配置中。
    • 添加了如何编写不需要应用设置的测试的示例
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      • VS 2017 -> 找不到 appsettings
      • VS 2019 (16.4.0) -> 找到 appsettings

      VS2019截图,可以看到Test和appsettings放在不同的文件夹里。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-04
        • 2013-08-20
        • 1970-01-01
        • 2016-11-12
        • 1970-01-01
        • 2013-10-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多