.net core 如何配置Xunit dotnet核心项目以从不同配置(开发、测试、登台)进行初始化

.net core 如何配置Xunit dotnet核心项目以从不同配置(开发、测试、登台)进行初始化,.net-core,xunit,.net Core,Xunit,我有一个RESTAPI,我想使用DotnetCore2.0进行集成测试(而不是单元测试) 其目的是能够在本地运行这些集成测试,指向本地开发环境,并使用我计划从Teamcity参数传递的给定测试环境 我在描述如何在ASP.NET核心中使用配置时遇到了这个问题。我正在为xunit项目寻找类似的东西 在.NETFramework世界中,我通过为环境创建单独的json文件来管理这一点,并添加了该文件以为测试环境添加一个变量,并在运行测试之前传递了environment的值。但是,在dotnet core

我有一个RESTAPI,我想使用DotnetCore2.0进行集成测试(而不是单元测试)

其目的是能够在本地运行这些集成测试,指向本地开发环境,并使用我计划从Teamcity参数传递的给定测试环境

我在描述如何在ASP.NET核心中使用配置时遇到了这个问题。我正在为xunit项目寻找类似的东西


在.NETFramework世界中,我通过为环境创建单独的json文件来管理这一点,并添加了该文件以为测试环境添加一个变量,并在运行测试之前传递了environment的值。但是,在dotnet core xunit 2.0项目中,我没有看到这个Settings.Settings文件选项。有什么建议可以解决这个问题吗?

在尝试了XUnit项目中的各种选项后,偶然发现了资源选项,它与我们在.NET world中使用的Settings.Settings相同

请参见下面的屏幕截图


如果有人像我一样陷入困境,希望这能对他们有所帮助。

我不确定您在测试中使用了什么机制/CI/CD管道

也就是说,您可以使用环境变量将配置传递给xUnit测试。例如,如果您使用Azure DevOps,则可以通过管道变量提供环境变量。我在Azure DevOps中的.NET Core 2.1项目中成功地做到了这一点,所以我知道这是可行的。但是,在旧版本的.NETCore中,我遇到了一些问题

例如,在Azure DevOps中,您可以按如下方式解决此问题

  • 创建生成管道变量-例如
    ASPNETCORE\u环境
  • 创建Visual Studio测试任务以运行xUnit测试
  • 在xUnit项目中,只需使用System.Environment.GetEnvironmentVariable(“ASPNETCORE\u环境”)
所有.NET核心配置类都可以通过
Microsoft.Extensions.configuration
Nuget包获得

因此,尽管我没有尝试过,但您应该能够在测试项目中直接使用这些框架类来配置特定测试环境的参数,例如

new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true)
        .AddEnvironmentVariables()
        .Build();

上面显示的
.AddEnvironmentVariables()
也可以用作替代,以覆盖appsettings.json中的默认值。感谢Adrian,事实上这就是我们最终所做的。我试图使用上面添加的解决方案,但它只对本地测试有用。在CI上,很难更改要运行测试的位置。我们通过Jenkins提供的环境变量解决了这个问题。对于一个测试项目,因为没有
Startup.cs
Program.cs
——我们应该将这段代码放在哪里以确保在运行时捕获它?@JamesGooding:你可以把它放在任何地方;例如,将其放在可以从任何测试调用的全局/静态帮助器方法中。如果使用xUnit,请将其放入Fixture类中,以便初始化只发生一次