単体テスト時にアプリ設定を読み取れない

単体テスト プロジェクト用に 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 から値をロードして、それを実装に渡します