私はこれに従いますguide。私はStartup
をappsettings.json
設定ファイルを使用するAPIプロジェクトに持っています。ASP.NETコアでの統合テストのAppSettings.json
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
}
私が見ている特定の部分はenv.ContentRootPath
です。私は掘り出し物をいくつか掘り下げましたが、appsettings.json
は実際にbin
フォルダにコピーされていませんが、ContentRootPath
はappsettings.json
ファイルがあるMySolution\src\MyProject.Api\
を返しているので問題ありません。
public class TestShould
{
private readonly TestServer _server;
private readonly HttpClient _client;
public TestShould()
{
_server = new TestServer(new WebHostBuilder().UseStartup<Startup>());
_client = _server.CreateClient();
}
[Fact]
public async Task ReturnSuccessful()
{
var response = await _client.GetAsync("/monitoring/test");
response.EnsureSuccessStatusCode();
var responseString = await response.Content.ReadAsStringAsync();
Assert.Equal("Successful", responseString);
}
これは基本的にガイドからコピー&ペーストされます。
は、だから私の統合テストプロジェクトで、私はこのテストを持っています。このテストをデバッグするとき、ContentRootPath
は実際には
MySolution\src\MyProject.IntegrationTests\bin\Debug\net461\
です。明らかにテストプロジェクトのビルド出力フォルダです。
appsettings.json
ファイルはありません(テストプロジェクト自体に別の
appsettings.json
ファイルがあります)。
TestServer
。
テストproject.json
ファイルを変更してこの問題を回避しようとしました。
"buildOptions": {
"emitEntryPoint": true,
"copyToOutput": {
"includeFiles": [
"appsettings.json"
]
}
}
私は、これは、ビルド出力ディレクトリにappsettings.json
ファイルをコピーすることを望んだが、それは、エントリポイントのMain
方法が欠落したプロジェクトを訴え、コンソールプロジェクトのようなテストプロジェクトを処理します。
これを回避するにはどうすればよいですか?私は何か間違っているのですか?
私が理解しているように、テスト中に、ターゲットのアプリケーションルートを(テスト出力ディレクトリの代わりに)コンテンツルートおよび/またはベースパスとして使用すると、アプリケーションの 'Startup'は実行時と同じように' appsettings.json'を使用しますテストの外。このようなシナリオでは、テストプロジェクト 'appsettings.json'を出力ディレクトリにコピーすることは効果がありません。そのjsonファイルはまったく読み込まれません。それはあなたの経験ですか? – superjos