From 52b9ddd4a7e32c00c7a791c2c00a262cda7042b5 Mon Sep 17 00:00:00 2001
From: gewuyou <95328647+GeWuYou@users.noreply.github.com>
Date: Wed, 29 Apr 2026 18:00:07 +0800
Subject: [PATCH] =?UTF-8?q?test(cqrs):=20=E8=A1=A5=E5=85=85=E4=B8=8A?=
=?UTF-8?q?=E4=B8=8B=E6=96=87=E5=89=8D=E7=BD=AE=E6=9D=A1=E4=BB=B6=E5=A4=B1?=
=?UTF-8?q?=E8=B4=A5=E5=9B=9E=E5=BD=92?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增 dispatcher 上下文校验测试,锁定非 IArchitectureContext 上下文的 request、notification 与 stream 失败语义
- 通过公开 runtime 工厂与最小容器 mock 覆盖调用前校验路径,不改 runtime 实现
- 更新 cqrs-rewrite 跟踪与 trace,记录 RP-060 的验证结论
---
.../CqrsDispatcherContextValidationTests.cs | 165 ++++++++++++++++++
.../todos/cqrs-rewrite-migration-tracking.md | 12 +-
.../traces/cqrs-rewrite-migration-trace.md | 17 ++
3 files changed, 192 insertions(+), 2 deletions(-)
create mode 100644 GFramework.Cqrs.Tests/Cqrs/CqrsDispatcherContextValidationTests.cs
diff --git a/GFramework.Cqrs.Tests/Cqrs/CqrsDispatcherContextValidationTests.cs b/GFramework.Cqrs.Tests/Cqrs/CqrsDispatcherContextValidationTests.cs
new file mode 100644
index 00000000..bf1998a9
--- /dev/null
+++ b/GFramework.Cqrs.Tests/Cqrs/CqrsDispatcherContextValidationTests.cs
@@ -0,0 +1,165 @@
+using System.Collections.Generic;
+using System.Runtime.CompilerServices;
+using GFramework.Core.Abstractions.Ioc;
+using GFramework.Core.Abstractions.Logging;
+using GFramework.Cqrs.Abstractions.Cqrs;
+using GFramework.Cqrs.Cqrs;
+using GFramework.Cqrs.Tests.Logging;
+
+namespace GFramework.Cqrs.Tests.Cqrs;
+
+///
+/// 验证默认 dispatcher 在上下文注入前置条件不满足时的失败语义。
+///
+[TestFixture]
+internal sealed class CqrsDispatcherContextValidationTests
+{
+ ///
+ /// 验证当 request handler 需要上下文注入、但当前 CQRS 上下文不实现 时,
+ /// dispatcher 会在调用前显式失败。
+ ///
+ [Test]
+ public void SendAsync_Should_Throw_When_Context_Does_Not_Implement_IArchitectureContext()
+ {
+ var runtime = CreateRuntime(
+ container =>
+ {
+ container
+ .Setup(currentContainer => currentContainer.Get(typeof(IRequestHandler)))
+ .Returns(new ContextAwareRequestHandler());
+ container
+ .Setup(currentContainer => currentContainer.GetAll(typeof(IPipelineBehavior)))
+ .Returns(Array.Empty