如何配置Xunit dotnet核心项目以从不同的配置(Dev,Test,Staging)初始化

时间:2018-04-27 15:46:12

标签: .net-core xunit

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

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

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

在.NET框架世界中,我通过为环境提供单独的json文件来管理它,并添加了Settings.settings文件来为测试环境添加变量,并在运行测试之前传递环境的值。但是在dotnet core xunit 2.0项目中,我没有看到这个Settings.settings文件选项。有任何建议如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我不确定您要使用哪种机制/ 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中的默认值

答案 1 :(得分:0)

在XUnit项目中使用各种选项后,偶然发现了Resources选项,这与我们以前在.NET世界中称为Settings.settings的内容相同。

见下面的截图。Resources for a project

希望如果他们像我一样陷入困境,这将有助于他们。