using OptionStudy.UnitApp.Next; namespace OptionStudy.Next { /// /// 环境变量 配置源 /// 环境变量分类:系统环境变量、用户环境变量、进程环境变量 /// 环境变量设置:系统图形工具、编程、启动文件 launchSettings.json(VS环境比较方便) /// public class EnvironmentVariablesConfigurationSourceTest : IDisposable { private readonly ITestOutputHelper testOutput; public EnvironmentVariablesConfigurationSourceTest(ITestOutputHelper testOutputHelper) { this.testOutput = testOutputHelper; } /// /// 设置的进程环境变量,在一次测试运行中会保留 /// 因为一次测试运行中的多个测试方法,是在一个进程中运行的。 /// [Theory] [InlineData("xUnit-First")] [InlineData("xUnit-Second")] public void ProcessEnvironmentVariables_Set_Test(string value) { var envName = "xUnit:AppName"; var env = Environment.GetEnvironmentVariable(envName); //一次运行多个测试用例时: //第一个测试用例运行时,是null值,但第二个用例运行时就有值,其值为第一个用例设置的值 if (env == null) { testOutput.WriteLine($"当前用例参数为 {value}, 环境变量 {nameof(envName)} 的值为 null "); } else { testOutput.WriteLine($"当前用例参数为 {value}, 环境变量 {nameof(envName)} 的值为 {env} "); } //设置环境变量,看看在另一个测试工里会不会保留设置的环境变量值 Environment.SetEnvironmentVariable(envName, value, EnvironmentVariableTarget.Process); } /// /// 设置进程环境变量 /// [Fact] public void Load_Set_ProcessEnvironmentVariables_Test() { // 设置进程环境变量 Environment.SetEnvironmentVariable("xUnit:AppName", "xunitAppName", EnvironmentVariableTarget.Process); Environment.SetEnvironmentVariable("xUnit:AppVersion", "2.2.2.2", EnvironmentVariableTarget.Process); Environment.SetEnvironmentVariable("xUnit:EMail:ReceiveAddress", "xunit@163.com", EnvironmentVariableTarget.Process); Environment.SetEnvironmentVariable("xUnit:Email:Recipient", "xunit", EnvironmentVariableTarget.Process); // 获取配置对象 var root = new ConfigurationBuilder().AddEnvironmentVariables("xUnit:").Build(); var option = root.Get(); Assert.NotNull(option); Assert.Equal("xunitAppName",option.AppName); Assert.Equal(new Version(2,2,2,2),option.AppVersion); Assert.Equal("xunit@163.com",option.EMail?.ReceiveAddress); Assert.Equal("xunit",option.EMail?.Recipient); } public void Dispose() { } } }