test(infra): P0——ModuleInitializer 初始化段容错,测试库不可达不再连坐全部测试
问题(2026-08-16 栈实证):M1→AppManager.Initialize→InitializePsConfig→ InnerAppConfigService.ConfigDic 读 AppConfig 表→ServerVersion.AutoDetect 连库, 库不可达时 ModuleInitializer 抛异常→903 个测试全部'Unable to create instance'全红, DB 断网期间阻塞全部开发(本周实证两天)。 修复:初始化段(AppManager.Initialize + DataCacheManager.UpdateOnce)包 try-catch, 失败降级为醒目警告(Console+NLog),纯内存测试照常可跑;依赖配置/缓存/库的测试 以各自连接错误失败(与降级前一致,不再伪装成类创建失败)。 完全跳过初始化仍用 YLErp_UNIT_TEST_SKIP_INITIALIZATION=1。 仅测试工程 Program.cs,零生产代码改动。 验证(库不可达、不开逃生门):修复前 0/17 类创建全失败;修复后 17/17 通过; 扩大集 48/48 通过(147ms)。常量类不受影响已证(ConsTrade.InterestMarginModels 为编译期常量,MarginModesTest 离线绿)。
This commit is contained in:
@@ -30,9 +30,24 @@ namespace YLErp
|
||||
|
||||
YLServiceLocator.SetServiceCollection(services);
|
||||
|
||||
AppManager.Initialize(YLErp.Enums.SubSystemName.UnitTest, configuration);
|
||||
|
||||
DataCacheManager.UpdateOnce();
|
||||
// P0 容错(2026-08-16):初始化段(AppManager.Initialize 内部 InitializePsConfig 读 AppConfig 表、
|
||||
// DataCacheManager.UpdateOnce 预热)在测试库不可达时不再让 ModuleInitializer 抛异常连坐全部 903 个
|
||||
// 测试——降级为醒目警告,纯内存测试照常可跑;依赖配置/缓存/库的测试将以各自的连接错误失败
|
||||
// (与降级前表现一致,只是不再全红归因到"类创建失败")。完全跳过初始化仍用
|
||||
// YLErp_UNIT_TEST_SKIP_INITIALIZATION=1。实测触发链:M1→AppManager.Initialize→ConfigDic→
|
||||
// ServerVersion.AutoDetect→MySQL 不可达(Program.cs:33,2026-08-16 栈实证)。
|
||||
try
|
||||
{
|
||||
AppManager.Initialize(YLErp.Enums.SubSystemName.UnitTest, configuration);
|
||||
DataCacheManager.UpdateOnce();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var warn = $"[UnitTest初始化降级] 初始化段失败(测试库不可达?):{ex.GetType().Name}: {ex.Message}。" +
|
||||
"纯内存测试继续;依赖配置/缓存/数据库的测试将失败——这是网络问题不是代码问题。";
|
||||
Console.WriteLine(warn);
|
||||
logger.Warn(warn);
|
||||
}
|
||||
|
||||
services.AddHttpClient("")
|
||||
.ConfigurePrimaryHttpMessageHandler(messageHandler =>
|
||||
|
||||
Reference in New Issue
Block a user