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

How to configure Xunit dotnet core project to initialize from different configuration(Dev, Test, Staging)

我有一个 REST api,我想使用 dotnet core 2.0 进行集成测试(不是单元测试)。

目的是能够 运行 这些集成测试本地指向本地开发环境以及我计划从 Teamcity 参数传递的给定测试环境。

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

在 .NET Framework 世界中,我通过为环境创建单独的 json 文件来管理它,并添加了 Settings.settings 文件来为测试环境添加变量,并在 [= 之前​​传递环境值24=]宁测试。但是在 dotnet core xunit 2.0 项目中我没有看到这个 Settings.settings 文件选项。有什么解决办法的建议吗?

在 XUnit 项目上尝试了各种选项后,偶然发现了 Resources 选项,这与我们过去在 .NET 世界中称为 Settings.settings 的选项相同。

见下方截图。

希望这对将来像我一样被卡住的人有所帮助。

我不确定您用于测试的 mechanism/CI/CD 管道。

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

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

  • 创建构建管道变量 - 例如ASPNETCORE_ENVIRONMENT
  • 创建 Visual Studio 测试任务以 运行 您的 xUnit 测试
  • 在您的 xUnit 项目中,只需使用 System.Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")

所有 .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

中默认值的替代方法