【发布时间】:2017-05-13 23:19:56
【问题描述】:
我正在关注这个guide。我在使用appsettings.json 配置文件的API 项目中有一个Startup。
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 方法,将测试项目视为控制台项目。
我能做些什么来解决这个问题?我做错了吗?
【问题讨论】:
标签: c# configuration asp.net-core integration-testing appsettings