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

