AppSettings.json用于ASP.NET Core中的集成测试
我正在关注此guide。我在使用appsettings.json
配置文件的API项目中有Startup
。AppSettings.json用于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();
}
我正在看的特定部分是env.ContentRootPath
。我做了一些挖掘,它看起来像我的appsettings.json
实际上并没有复制到bin
文件夹,但这很好,因为ContentRootPath
返回MySolution\src\MyProject.Api\
,这是appsettings.json
文件所在的位置。
所以在我的集成测试的项目我有这样的测试:
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
方法,治疗像一个控制台项目的测试项目。
我能做些什么来解决这个问题?难道我做错了什么?
回答:
最后,我沿着这个guide,特别是整合测试部分向页面的底部。这消除了将appsettings.json
文件复制到输出目录的需要。相反,它会告诉测试项目Web应用程序的实际目录。
至于复制appsettings.json
到输出目录,我也设法让它工作。从嘟嘟与答案相结合,我用include
代替includeFiles
因此产生的部分将是这个样子:
"buildOptions": { "copyToOutput": {
"include": "appsettings.json"
}
}
我不完全知道为什么这个工作,但它确实。我快速查看了文档,但找不到任何真正的差异,并且由于原始问题基本解决,所以我没有进一步观察。
回答:
删除测试project.json
文件。
以上是 AppSettings.json用于ASP.NET Core中的集成测试 的全部内容, 来源链接: utcz.com/qa/258669.html