15

テストで使用する必要があるデータベースへの接続文字列を取得するために、 XUnitプロジェクトで次のことを実行しようとしています。

public class TestFixture : IDisposable
{
    public IConfigurationRoot Configuration { get; set; }
    public MyFixture()
    {
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
        Configuration = builder.Build();
    }

    public void Dispose()
    {    
    }
}

Startup.csで使用すると、WebAPIおよびMVCテンプレートで完全に機能するため、非常に奇妙です。appsettings.jsonさらに、このコードは以前は dnx を使用して RC1 で動作していましたが、すべてを RC2 と Core CLI に更新したため、xunit クラス ライブラリのルートにあるファイルを見つけることができなくなりました。

これが私のテストクラスの外観です。構成をどのように呼び出しているかがわかります。

public class MyTests : IClassFixture<MyFixture>
{
    private readonly MyFixture _fixture;
    public MyTests(MyFixture fixture)
    {
        this._fixture = fixture;
    }

    [Fact]
    public void TestCase1()
    {
        ICarRepository carRepository = new CarRepository(_fixture.Configuration);
    }
}
4

2 に答える 2

20

これは単純な問題です。xunitプロジェクトappsetting.jsonの下にも存在する必要があります。または、他のプロジェクトに存在する場所を指す相対パスを使用する必要があります。appsettings.json

public class TestFixture : IDisposable
{
    public IConfigurationRoot Configuration { get; set; }
    public MyFixture()
    {
        var builder = new ConfigurationBuilder()
            .AddJsonFile("../../OtherProj/src/OtherProj/appsettings.json", 
                         optional: true, reloadOnChange: true);
        Configuration = builder.Build();
    }

    public void Dispose() {  }
}

理想的には、テスト プロジェクトに対してローカルな独自の構成ファイルを用意するだけです。私のASP.NET Core RC2データベース テスト プロジェクトでは、フィクスチャは次のようになります。

public DatabaseFixture()
{
    var builder =
        new ConfigurationBuilder()
            .AddJsonFile("testsettings.json")
            .AddEnvironmentVariables();
   // Omitted...
}

testsettings.jsonはテスト固有の構成で、プロジェクトに対してローカルです。

アップデート

としてproject.jsonマークしていることを確認してください。詳細については、スキーマ ストアを参照してください。appsettings.jsoncopyToOutput

"buildOptions": {
  "copyToOutput": {
    "include": [ "appsettings.json" ]
  }
},
于 2016-05-27T11:52:07.847 に答える