You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

109 lines
3.7 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
namespace OptionStudy.Next
{
/// <summary>
/// 5.2 配置模型
/// IConfigurationProvider 测试
/// IConfigrutionProvider 被设计为 IConfigurationSource 构建,并保持在 IConfigurationBuilder 的属性中
/// 所以一般不单独实例化出来使用,而是配合 IConfigurationSource 和 IConfigurationBuilder 使用
/// </summary>
public class IConfigurationProviderTest: IDisposable
{
private readonly ITestOutputHelper testOutput;
private IDictionary<string, string?> memoryData = new Dictionary<string, string?>()
{
["AppName"] = "MemoryAppName",
["AppVersion"] = "0.0.0.1",
["EMail:ReceiveAddress"] = "memory@163.com",
["EMail:Recipient"] = "memory",
};
public IConfigurationProviderTest(ITestOutputHelper testOutputHelper)
{
testOutput = testOutputHelper;
}
/// <summary>
/// 实例化配置提供者
/// </summary>
[Fact]
public void IConfigrutionProvider_New_Test()
{
//不配合 IConfigrutionSource 直接实例化,将会异常
Action createAction = () =>
{
var provider = new MemoryConfigurationProvider(null);
};
Assert.ThrowsAny<ArgumentNullException>(createAction);
//关联 ConfigurationSource
var source = new MemoryConfigurationSource()
{
InitialData = new Dictionary<string, string?>() { ["TestName"]="MyTest"}
};
var provider = new MemoryConfigurationProvider(source);
Assert.NotNull(provider);
//可以进行各种操作
Action run = () =>
{
provider.Set("TestName", "UpdateName");
if (!provider.TryGet("Demo",out string _v))
{
provider.Add("Demo", "demo");
}
provider.Load();
};
//断言不发生异常
//方法一:使用 FluentAssertions 库
run.Should().NotThrow();
//方法二xUnit 变通方法
var exception = Record.Exception(run);
Assert.Null(exception);
}
/// <summary>
/// 获取 IConfigrution 手动添加配置源
/// 方法一ConfigurationSource Build()方法
/// 说明:参数为空值,框架设置的参数并没有在初始化中直接使用,可能是强调与 ConfigurationBuilder 关系吧
/// IConfigurationProvider 应该由 IConfigurationBuilder 创建,基本是写在扩展方法里,这样设计可能是强调这种编程使用方式吧
/// </summary>
[Fact]
public void IConfigrutionProvider_Create_1_Test()
{
//内存配置源
MemoryConfigurationSource source = new MemoryConfigurationSource()
{
InitialData= memoryData,
};
//内存配置提供者:实际上由配置源提供,构建过程中直接使用配置源,不需要单独提出来
var provider = source.Build(null);
//直接使用配置源,无需显式使用 Provider
var builder = new ConfigurationBuilder().Add(source);
var configrution = builder.Build();
Assert.NotNull(configrution);
}
public void Dispose()
{
}
}
}