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.

126 lines
3.8 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 OptionStudy.UnitApp.Next;
namespace OptionStudy.Next
{
/// <summary>
/// 配置的同步
/// </summary>
public class ConfigSyncTest : IDisposable
{
private readonly ITestOutputHelper testOutput;
public ConfigSyncTest(ITestOutputHelper testOutputHelper)
{
this.testOutput = testOutputHelper;
}
/// <summary>
/// 触发同步事件
/// Provider 执行 Load() 方法
/// </summary>
[Fact]
public void SyncConfigFor_Provider_Load_Test()
{
var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs/appsettings.json");
var root = new ConfigurationBuilder()
.AddJsonFile(filePath, false, true)
.Build();
bool excuted =false;
Action<object?> run = (obj) => // 执行事件
{
excuted=true;
var configJsonText = System.Text.Json.JsonSerializer.Serialize(root.Get<AppOption>());
testOutput?.WriteLine(configJsonText);
};
//注册回调事件
root.GetReloadToken().RegisterChangeCallback(run,null);
//触发回调Provider 重新加载数据
root.Providers.First().Load();
//等待一会,监控到文件变化后会执行回调方法
Thread.Sleep(500);
//回调执行过
Assert.True(excuted);
}
/// <summary>
/// 触发同步事件
/// IConfigurationRoot 执行 Reload() 方法
/// </summary>
[Fact]
public void SyncConfigFor_IConfigurationRoot_Reload_Test()
{
var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs/appsettings.json");
var root = new ConfigurationBuilder()
.AddJsonFile(filePath, false, true)
.Build();
bool excuted = false;
Action<object?> run = (obj) => // 执行事件
{
excuted = true;
var configJsonText = System.Text.Json.JsonSerializer.Serialize(root.Get<AppOption>());
testOutput?.WriteLine(configJsonText);
};
//注册回调事件
root.GetReloadToken().RegisterChangeCallback(run, null);
//触发回调ConfigurationRoot 重新加载
root.Reload();
//等待一会,监控到文件变化后会执行回调方法
Thread.Sleep(500);
//回调执行过
Assert.True(excuted);
}
/// <summary>
/// 触发同步事件
/// 修改物理文件内容
/// </summary>
[Fact]
public void SyncConfigFor_ChangeFile_Test()
{
var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs/appsettings.json");
var root = new ConfigurationBuilder()
.AddJsonFile(filePath, false, true)
.Build();
bool excuted = false;
Action<object?> run = (obj) => // 执行事件
{
excuted = true;
var configJsonText = System.Text.Json.JsonSerializer.Serialize(root.Get<AppOption>());
testOutput?.WriteLine(configJsonText);
};
//注册回调事件
root.GetReloadToken().RegisterChangeCallback(run, null);
//触发回调:修改配置源文件的内容
File.AppendAllText(filePath, " ");
//等待一会,监控到文件变化后会执行回调方法
Thread.Sleep(500);
//回调执行过
Assert.True(excuted);
}
public void Dispose()
{
}
}
}