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#


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