From 97aff02e1d02e9a19c7ddabd101775d7d03d4498 Mon Sep 17 00:00:00 2001 From: hjhan Date: Mon, 17 Aug 2026 10:00:09 +0800 Subject: [PATCH] =?UTF-8?q?test(infra):=20P0=E2=80=94=E2=80=94ModuleInitia?= =?UTF-8?q?lizer=20=E5=88=9D=E5=A7=8B=E5=8C=96=E6=AE=B5=E5=AE=B9=E9=94=99?= =?UTF-8?q?=EF=BC=8C=E6=B5=8B=E8=AF=95=E5=BA=93=E4=B8=8D=E5=8F=AF=E8=BE=BE?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E8=BF=9E=E5=9D=90=E5=85=A8=E9=83=A8=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题(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 离线绿)。 --- UnitTestProject/Program.cs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/UnitTestProject/Program.cs b/UnitTestProject/Program.cs index 0f768067..708646cf 100644 --- a/UnitTestProject/Program.cs +++ b/UnitTestProject/Program.cs @@ -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 =>