在测试项目中使用ASP.NET Core的ConfigurationBuilder

Muh*_*eed 8 .net c# asp.net-core-mvc asp.net-core

我想在我的功能测试项目中使用IHostingEnvironmentConfigurationBuilder,因此根据环境,功能测试使用不同的配置集运行.我想使用下面的代码:

public IConfigurationRoot ConfigureConfiguration(IHostingEnvironment hostingEnvironment)
{
    var builder = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json")
        .AddJsonFile($"appsettings.{hostingEnvironment.EnvironmentName}.json", true)
        .AddEnvironmentVariables();
    return builder.Build();
}
Run Code Online (Sandbox Code Playgroud)

我希望有一个appSettings.jsonappSettings.Production.json文件来指出我的功能测试在生产中.这可能吗?如何实现?我需要一个实例IHostingEnvironment.

Wil*_*Ray 11

您可以通过ConfigurationBuilder几个步骤在测试项目中使用它.我认为你不需要IHostingEnvironment界面本身.

首先,在项目中添加两个具有ConfigurationBuilder扩展方法的NuGet包:

"dependencies": {
  "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc1-final",
  "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final"
}
Run Code Online (Sandbox Code Playgroud)

其次,将您想要的环境变量放入测试项目的属性中:

环境变量对话框

然后,您可以在测试项目中创建自己的构建器:

private readonly IConfigurationRoot _configuration;

public BuildConfig()
{
    var environmentName = Environment.GetEnvironmentVariable("Hosting:Environment");

    var config = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json")
        .AddJsonFile($"appsettings.{environmentName}.json", true)
        .AddEnvironmentVariables();

    _configuration = config.Build();
}
Run Code Online (Sandbox Code Playgroud)

如果要使用完全相同的设置文件(而不是副本),则需要添加路径.

  • 我的测试项目完全忽略了我设置的任何配置;即使我从测试类中删除了对它的所有引用,它仍在运行我的主项目的“启动”。我想不通。:/ (2认同)