Ich bin dieser guide folgen. Ich habe eine Startup
in dem API-Projekt, das eine appsettings.json
Konfigurationsdatei verwendet.AppSettings.json für Integration Test in ASP.NET Core
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();
}
Der besondere Teil, den ich betrachte, ist die env.ContentRootPath
. Ich habe etwas graben herum und es sieht aus wie meine appsettings.json
ist nicht tatsächlich in die bin
Ordner kopiert, aber das ist in Ordnung, wie ContentRootPath
MySolution\src\MyProject.Api\
zurückgibt, wo sich die appsettings.json
Datei befindet.
Also in meinem Integrationstestprojekt habe ich diesen Test:
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);
}
Diese im Grunde kopieren und einfügen von der Führung. Wenn ich diesen Test debugge, ist ContentRootPath
eigentlich MySolution\src\MyProject.IntegrationTests\bin\Debug\net461\
, die offensichtlich der Build-Ausgabeordner für das Testprojekt ist und wieder die appsettings.json
Datei ist nicht da (ja ich habe eine andere appsettings.json
Datei im Testprojekt selbst), so dass der Test bei der Erstellung fehlschlägt die TestServer
.
Ich habe versucht, dies zu umgehen, indem Sie den Test project.json
Datei ändern.
"buildOptions": {
"emitEntryPoint": true,
"copyToOutput": {
"includeFiles": [
"appsettings.json"
]
}
}
Ich hoffte, dass dies die appsettings.json
Datei in den Build-Ausgabeverzeichnis kopiert werden würde, aber es beschwert sich über das Projekt ein Main
Verfahren für einen Einstiegspunkt fehlt, wie ein Konsolenprojekt das Testprojekt zu behandeln.
Was kann ich tun, um dies zu umgehen? Mache ich etwas falsch?
Aus meinem Verständnis: Während des Tests, wenn Sie die Ziel-Anwendung root als Content-Root-und/oder Basis-Pfad (anstelle des Test-Output-Verzeichnis) verwenden, wird Ihre Anwendung 'Startup' eigene 'appsettings.json' verwenden, wie beim Ausführen außerhalb von Tests. In einem solchen Szenario hat das Kopieren des Testprojekts 'appsettings.json' in sein Ausgabeverzeichnis keine Auswirkungen. Diese JSON-Datei wird überhaupt nicht gelesen. Ist das deine Erfahrung? – superjos