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テンプレートで完全に機能するため、非常に奇妙です。さらに、このコードは以前はdnxを使用してRC1で機能していましたが、すべてをRC2およびCore CLIに更新したため、xunitクラスライブラリのルートにあるappsettings.json
ファイルを見つけることができなくなりました。
ここに私のテストクラスがどのように見えるかですので、私がどのように設定を求めているかを見ることができます:
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);
}
}
これは簡単な問題です。appsetting.json
もxunitプロジェクトの下に存在する必要があります。または、他のプロジェクトの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.json
をcopyToOutput
としてマークしていることを確認してください。詳細は スキーマストア を参照してください。
"buildOptions": {
"copyToOutput": {
"include": [ "appsettings.json" ]
}
},
@DavidPineの回答の詳細情報を追加するには
どういうわけか相対パスは私にはうまくいかないので、ここに私がそれをする方法があります。
var builder = new ConfigurationBuilder()
.SetBasePath(Path.GetFullPath(@"../XXXX")).AddJsonFile("appsettings.json");
私のは.net core 1.0.0-preview1-002702です