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

标签 c# .net asp.net-core asp.net-core-mvc

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

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

我想要一个 appSettings.jsonappSettings.Production.json 文件来指向我在生产环境中的功能测试。这可能吗?如何实现?我需要一个 IHostingEnvironment 的实例。

最佳答案

您可以通过几个步骤在测试项目中使用 ConfigurationBuilder。我认为您不需要 IHostingEnvironment 接口(interface)本身。

首先,将两个 NuGet 包添加到您的项目中,它们具有 ConfigurationBuilder 扩展方法:

"dependencies": {
  "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc1-final",
  "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final"
}

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

environment variable dialog

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

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();
}

如果您想使用完全相同的设置文件(而不是副本),那么您需要添加一个路径。

关于c# - 在测试项目中使用 ASP.NET Core 的 ConfigurationBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36943484/

相关文章:

c# - 比较包含相同枚举类型的枚举值的两个对象

c# - ASP.Net 对导航栏按钮使用 @Html.ActionLink()

.net - 计算对象的大小,使其包括其所有子对象的大小和(孙子链)

c# - 带有外键列表的附加属性

c# - 没有构造函数的本地化依赖注入(inject)

ASP.NET Core 使用 JWT 登录

c# - 如何在 .NET 上创建软件路由器?

c# - 文本解析 - 我的解析器跳过命令

c# - 在 TableCell 中插入 DropDownList

c# - 如何使用 .NET 快速获取目录中最旧的文件?