using Microsoft.Extensions.Configuration;
namespace OptionStudy.UnitApp
{
///
/// 5.1.6 根据环境动态加载配置文件
///
public class DynamicLoadConfigFileTest : IDisposable
{
private readonly ITestOutputHelper? testOutput;
public DynamicLoadConfigFileTest(ITestOutputHelperAccessor helperAccessor)
{
testOutput = helperAccessor.Output;
}
///
/// 动态加载json配置文件
///
[Theory]
[InlineData("product")]
[InlineData("development")]
[InlineData("custom")]
public void LoadJsonFile_ByPara_Test(string env)
{
var config = new ConfigurationBuilder()
.AddJsonFile($"Configs/appsettings.{env}.json", true, true)
.Build();
var appOption = config.Get();
//断言
Assert.NotNull(appOption);
Assert.Equal($"{env}AppName", appOption.AppName);
Assert.Equal("0.0.0.1", appOption.AppVersion);
//子配置节:父配置对象的属性名必须和配置KEY保持一致,否则不能自动绑定。
Assert.NotNull(appOption.EMail);
Assert.Equal($"{env}@163.com", appOption.EMail.ReceiveAddress);
Assert.Equal($"{env}", appOption.EMail.Recipient);
testOutput?.WriteLine("根据参数名,动态加载json配置文件!");
}
///
/// 根据环境变量动态加载json配置文件
/// 环境变量类别:系统环境变量、用户环境变量、进程环境变量
/// 环境变量使用:
/// 1、对操作系统设置
/// 2、项目启动文件:项目/Properties/launchSettings.json
/// 3、编程实现: System.Environment.SetEnvironmentVariable("环境变量名","值",环境变量类型)
/// 4、使用cmd命令行参数运行程序:
///
/// set 环境变量名=环境变量值
/// dotnet xx.dll
/// # 或者
/// xx.exe
///
///
[Theory]
[InlineData("product")]
[InlineData("development")]
[InlineData("custom")]
public void LoadJsonFileByEnv_Test(string env)
{
//设置进程系统变量为参数值
var envName = "DOTNET_XUNIT_TEST";
//设置进程环境变量
System.Environment.SetEnvironmentVariable(envName, env, EnvironmentVariableTarget.Process);
//获取变量值
var envValue = System.Environment.GetEnvironmentVariable(envName, EnvironmentVariableTarget.Process);
var config = new ConfigurationBuilder()
.AddJsonFile($"Configs/appsettings.json", false, true)
.AddJsonFile($"Configs/appsettings.{envValue}.json", true, true)
.Build();
var appOption = config.Get();
//断言
Assert.NotNull(appOption);
Assert.Equal($"{envValue}AppName", appOption.AppName);
Assert.Equal("0.0.0.1", appOption.AppVersion);
//子配置节:父配置对象的属性名必须和配置KEY保持一致,否则不能自动绑定。
Assert.NotNull(appOption.EMail);
Assert.Equal($"{envValue}@163.com", appOption.EMail.ReceiveAddress);
Assert.Equal($"{envValue}", appOption.EMail.Recipient);
testOutput?.WriteLine("根据环境变量值,动态加载json配置文件!");
}
public void Dispose()
{
}
}
}