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);
|
YLServiceLocator.SetServiceCollection(services);
|
||||||
|
|
||||||
|
// 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);
|
AppManager.Initialize(YLErp.Enums.SubSystemName.UnitTest, configuration);
|
||||||
|
|
||||||
DataCacheManager.UpdateOnce();
|
DataCacheManager.UpdateOnce();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
var warn = $"[UnitTest初始化降级] 初始化段失败(测试库不可达?):{ex.GetType().Name}: {ex.Message}。" +
|
||||||
|
"纯内存测试继续;依赖配置/缓存/数据库的测试将失败——这是网络问题不是代码问题。";
|
||||||
|
Console.WriteLine(warn);
|
||||||
|
logger.Warn(warn);
|
||||||
|
}
|
||||||
|
|
||||||
services.AddHttpClient("")
|
services.AddHttpClient("")
|
||||||
.ConfigurePrimaryHttpMessageHandler(messageHandler =>
|
.ConfigurePrimaryHttpMessageHandler(messageHandler =>
|
||||||
|
|||||||
Reference in New Issue
Block a user