test(cqrs-tests): 收敛测试日志与行为集合抽象 warning

- 修复 TestLogger 与 MediatorAdvancedFeaturesTests 的集合抽象暴露问题,保持测试语义不变

- 更新 analyzer warning reduction 的 active tracking 与 trace,记录新的 640 条根构建基线和委派范围
This commit is contained in:
gewuyou 2026-04-25 15:54:27 +08:00
parent 58ba6c011e
commit 4edfe53cd9
4 changed files with 69 additions and 23 deletions

View File

@ -21,6 +21,8 @@ namespace GFramework.Cqrs.Tests.Logging;
/// </summary>
public sealed class TestLogger : AbstractLogger
{
private readonly List<LogEntry> _logs = [];
/// <summary>
/// 初始化测试日志记录器。
/// </summary>
@ -33,7 +35,7 @@ public sealed class TestLogger : AbstractLogger
/// <summary>
/// 获取当前测试期间捕获到的日志条目。
/// </summary>
public List<LogEntry> Logs { get; } = [];
public IReadOnlyList<LogEntry> Logs => _logs;
/// <summary>
/// 将日志写入内存,供断言使用。
@ -43,7 +45,7 @@ public sealed class TestLogger : AbstractLogger
/// <param name="exception">关联异常。</param>
protected override void Write(LogLevel level, string message, Exception? exception)
{
Logs.Add(new LogEntry(level, message, exception));
_logs.Add(new LogEntry(level, message, exception));
}
/// <summary>

View File

@ -368,7 +368,10 @@ public sealed class TestBehaviorRequestHandler : IRequestHandler<TestBehaviorReq
public static class TestLoggingBehavior
{
public static List<string> LoggedMessages { get; set; } = new();
/// <summary>
/// 记录测试行为写入的日志消息,同时避免向调用方暴露具体集合实现。
/// </summary>
public static IList<string> LoggedMessages { get; set; } = new List<string>();
}
public sealed record TestValidatedRequest : IRequest<string>
@ -467,8 +470,19 @@ public sealed record TestCircuitBreakerRequest : IRequest<string>
// 复杂场景相关类
public class SagaData
{
public List<int> CompletedSteps { get; } = new();
public List<int> CompensatedSteps { get; } = new();
/// <summary>
/// 获取 Saga 已成功执行的步骤集合。
/// </summary>
public IList<int> CompletedSteps { get; } = new List<int>();
/// <summary>
/// 获取 Saga 失败后已执行补偿的步骤集合。
/// </summary>
public IList<int> CompensatedSteps { get; } = new List<int>();
/// <summary>
/// 获取或设置 Saga 是否已经完整结束。
/// </summary>
public bool IsCompleted { get; set; }
}
@ -489,7 +503,11 @@ public sealed record TestExternalServiceRequest : IRequest<string>
public sealed record TestDatabaseRequest : IRequest<string>
{
public string Data { get; init; } = string.Empty;
public List<string> Storage { get; init; } = new();
/// <summary>
/// 获取或初始化用于模拟数据库写入的可变存储集合,同时避免泄漏具体集合实现。
/// </summary>
public IList<string> Storage { get; init; } = new List<string>();
}
#endregion

View File

@ -6,14 +6,14 @@
## 当前恢复点
- 恢复点编号:`ANALYZER-WARNING-REDUCTION-RP-068`
- 当前阶段:`Phase 68`
- 恢复点编号:`ANALYZER-WARNING-REDUCTION-RP-069`
- 当前阶段:`Phase 69`
- 当前焦点:
- `2026-04-25` 主线程已提交 `1b85b53` `refactor(game): 收敛版本化迁移运行器长方法 warning`
- 并行 subagent 批次已提交 `a7fa70e` `fix(core-tests): 清理 LogContextTests 异步等待 warning``9f6204d` `fix(core-tests): 收口 LoggerTests 日志集合抽象`
- 当前主线程单文件批次聚焦 `GFramework.Cqrs.Tests/Cqrs/CqrsHandlerRegistrarTests.cs`,通过拆分缓存元数据测试的装配、断言与 verify helper 收敛根构建直接确认的 `MA0051`
- 提权后的直接仓库根基线已从 `649 Warning(s)` 降至 `645 Warning(s)`,说明本轮 3 文件并行批次继续有效
- `GFramework.Cqrs.Tests` `GFramework.Core.Tests` 的直接受影响 `Release` build 当前均已通过branch diff 仍显著低于 `$gframework-batch-boot 50` 阈值
- `2026-04-25` 主线程已提交 `58ba6c0` `test(cqrs-tests): 收敛处理器注册缓存测试 warning`
- 当前并行双文件批次聚焦 `GFramework.Cqrs.Tests/Logging/TestLogger.cs``GFramework.Cqrs.Tests/Mediator/MediatorAdvancedFeaturesTests.cs`
- 主线程收敛 `TestLogger.Logs` 的集合抽象暴露问题worker 则在 `MediatorAdvancedFeaturesTests.cs` 内收敛一组低风险 `MA0016`
- 提权后的直接仓库根基线已从 `645 Warning(s)` 降至 `640 Warning(s)`,说明本轮双文件 `Cqrs.Tests` 批次继续有效
- `GFramework.Cqrs.Tests` 的直接受影响 `Release` build 当前为 `0 Warning(s)``0 Error(s)`branch diff 仍显著低于 `$gframework-batch-boot 50` 阈值
## 当前活跃事实
@ -22,12 +22,14 @@
- `dotnet clean`
- 结果:成功;此前沙箱内 “Build FAILED but 0 errors” 的 clean 结果不是仓库真值
- `dotnet build`
- 最新结果:成功;`645 Warning(s)`、`0 Error(s)`
- 最新结果:成功;`640 Warning(s)`、`0 Error(s)`
- 已提交的低风险批次文件:
- `AGENTS.md`
- `GFramework.Core.Tests/Logging/LogContextTests.cs`
- `GFramework.Core.Tests/Logging/LoggerTests.cs`
- `GFramework.Cqrs.Tests/Cqrs/CqrsHandlerRegistrarTests.cs`
- `GFramework.Cqrs.Tests/Logging/TestLogger.cs`
- `GFramework.Cqrs.Tests/Mediator/MediatorAdvancedFeaturesTests.cs`
- `GFramework.Ecs.Arch.Tests/Ecs/EcsAdvancedTests.cs`
- `GFramework.Game.Tests/Config/GameConfigBootstrapTests.cs`
- `GFramework.Game.Tests/Config/GeneratedConfigConsumerIntegrationTests.cs`
@ -38,11 +40,9 @@
- `ai-plan/public/analyzer-warning-reduction/traces/analyzer-warning-reduction-trace.md`
- 当前批次验证结果:
- `dotnet build GFramework.Cqrs.Tests/GFramework.Cqrs.Tests.csproj -c Release`
- 最新主线程结果:成功;`155 Warning(s)``0 Error(s)`
- `dotnet test GFramework.Cqrs.Tests/GFramework.Cqrs.Tests.csproj -c Release --no-build --filter "FullyQualifiedName~CqrsHandlerRegistrarTests.RegisterHandlers_Should_Cache_Assembly_Metadata_Across_Containers"`
- 最新主线程结果:成功;`Passed 1/1`
- `dotnet build GFramework.Core.Tests/GFramework.Core.Tests.csproj -c Release`
- 最新主线程结果:成功;`0 Warning(s)``0 Error(s)`
- `dotnet build GFramework.Core.Tests/GFramework.Core.Tests.csproj -c Release`
- 上一轮主线程结果:成功;`0 Warning(s)``0 Error(s)`
## 当前风险
@ -70,16 +70,14 @@
- `dotnet clean`
- 当前结果:成功;在提权后的直接 shell 中可正常完成仓库根 clean
- `dotnet build`
- 当前结果:成功;`645 Warning(s)`、`0 Error(s)`
- 当前结果:成功;`640 Warning(s)`、`0 Error(s)`
- `dotnet build GFramework.Cqrs.Tests/GFramework.Cqrs.Tests.csproj -c Release`
- 当前结果:成功;`155 Warning(s)``0 Error(s)`
- `dotnet test GFramework.Cqrs.Tests/GFramework.Cqrs.Tests.csproj -c Release --no-build --filter "FullyQualifiedName~CqrsHandlerRegistrarTests.RegisterHandlers_Should_Cache_Assembly_Metadata_Across_Containers"`
- 当前结果:成功;`Passed 1/1`
- 当前结果:成功;`0 Warning(s)``0 Error(s)`
- `dotnet build GFramework.Core.Tests/GFramework.Core.Tests.csproj -c Release`
- 当前结果:成功;`0 Warning(s)``0 Error(s)`
## 下一步建议
1. 以当前 `645 Warning(s)` 根基线为新恢复点,继续按 `$gframework-batch-boot 50` 规则重算 branch diff并挑选下一个 1-3 文件的低风险热点。
1. 以当前 `640 Warning(s)` 根基线为新恢复点,继续按 `$gframework-batch-boot 50` 规则重算 branch diff并挑选下一个 1-3 文件的低风险热点。
2. 下一轮优先从 `GFramework.Cqrs.Tests``GFramework.Core.Tests``GFramework.Game` 中继续选择单文件 `MA0051``MA0016` 或测试噪音切片,避免过早推高 review 范围。
3. 后续凡是沙箱内 `.NET` 验证再次出现无诊断失败、pipe/socket 权限问题或与普通 shell 不一致的结果,直接申请沙箱外重跑同一命令,不再扩散 workaround 型命令噪音。

View File

@ -1,5 +1,33 @@
# Analyzer Warning Reduction 追踪
## 2026-04-25 — RP-069
### 阶段:继续收口 Cqrs.Tests 双文件集合抽象 warning并刷新新的仓库根基线
- 触发背景:
- `RP-068` 收尾后,当前分支的仓库根基线已降到 `645 Warning(s)`branch diff 仍远低于 `$gframework-batch-boot 50`
- 为保持批次小而连续,主线程继续留在 `GFramework.Cqrs.Tests` 项目内,选取两个不涉及跨文件重构的 `MA0016` 切片
- 接受的委派范围:
- worker `Chandrasekhar`
- 文件:`GFramework.Cqrs.Tests/Mediator/MediatorAdvancedFeaturesTests.cs`
- 目标:在同一文件内收敛 `TestLoggingBehavior.LoggedMessages``SagaData``TestDatabaseRequest` 的集合抽象暴露问题
- 结果:未自行提交;主线程接受其工作树改动并纳入本轮批次
- 主线程实施:
- 本地修改 `GFramework.Cqrs.Tests/Logging/TestLogger.cs`
- 将 `Logs``List<LogEntry>` 收口为 `IReadOnlyList<LogEntry>`,保留私有 `_logs` 作为内部存储
- 与 worker 的 `MediatorAdvancedFeaturesTests.cs` 改动合并后,重新执行 `GFramework.Cqrs.Tests` 与仓库根验证,确认双文件批次的净效果
- 验证里程碑:
- `dotnet build GFramework.Cqrs.Tests/GFramework.Cqrs.Tests.csproj -c Release`
- 结果:成功;`0 Warning(s)``0 Error(s)`
- `dotnet clean`
- 结果:成功
- `dotnet build`
- 结果:成功;`640 Warning(s)``0 Error(s)`,相较 `RP-068``645` 再下降 `5`
- 当前结论:
- `Cqrs.Tests` 双文件批次已确认有效,并继续压低仓库根 warning 基线
- 当前分支距离 `$gframework-batch-boot 50` 的停止阈值仍有很大空间,可以继续按“主线程小切片 + subagent 并行单文件”推进
- 下一轮可优先回到 `GFramework.Core.Tests` 或继续选择新的 `GFramework.Cqrs.Tests` 单文件热点
## 2026-04-25 — RP-068
### 阶段:吸收并行 subagent 小批次,并继续压低仓库根 warning 基线