From 9098490fbb7e2c934fc3ca24bd1eaae310387fd8 Mon Sep 17 00:00:00 2001 From: gewuyou <95328647+GeWuYou@users.noreply.github.com> Date: Tue, 28 Apr 2026 07:47:28 +0800 Subject: [PATCH] =?UTF-8?q?fix(cqrs-tests):=20=E6=8B=86=E5=88=86=20dispatc?= =?UTF-8?q?her=20cache=20=E6=B5=8B=E8=AF=95=E8=BE=85=E5=8A=A9=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 拆分 CqrsDispatcherCacheTests 末尾的 request、handler 与 behavior 辅助类型到同目录独立文件 - 修复 dispatcher cache 测试中的 ConfigureAwait warning,保持现有断言与分发语义不变 --- .../Cqrs/CqrsDispatcherCacheTests.cs | 118 +----------------- .../Cqrs/DispatcherCacheNotification.cs | 8 ++ .../DispatcherCacheNotificationHandler.cs | 21 ++++ .../Cqrs/DispatcherCacheRequest.cs | 8 ++ .../Cqrs/DispatcherCacheRequestHandler.cs | 21 ++++ .../Cqrs/DispatcherCacheStreamHandler.cs | 27 ++++ .../Cqrs/DispatcherCacheStreamRequest.cs | 8 ++ .../Cqrs/DispatcherPipelineCacheBehavior.cs | 26 ++++ .../Cqrs/DispatcherPipelineCacheRequest.cs | 8 ++ .../DispatcherPipelineCacheRequestHandler.cs | 21 ++++ .../Cqrs/DispatcherStringCacheRequest.cs | 8 ++ .../DispatcherStringCacheRequestHandler.cs | 21 ++++ 12 files changed, 178 insertions(+), 117 deletions(-) create mode 100644 GFramework.Cqrs.Tests/Cqrs/DispatcherCacheNotification.cs create mode 100644 GFramework.Cqrs.Tests/Cqrs/DispatcherCacheNotificationHandler.cs create mode 100644 GFramework.Cqrs.Tests/Cqrs/DispatcherCacheRequest.cs create mode 100644 GFramework.Cqrs.Tests/Cqrs/DispatcherCacheRequestHandler.cs create mode 100644 GFramework.Cqrs.Tests/Cqrs/DispatcherCacheStreamHandler.cs create mode 100644 GFramework.Cqrs.Tests/Cqrs/DispatcherCacheStreamRequest.cs create mode 100644 GFramework.Cqrs.Tests/Cqrs/DispatcherPipelineCacheBehavior.cs create mode 100644 GFramework.Cqrs.Tests/Cqrs/DispatcherPipelineCacheRequest.cs create mode 100644 GFramework.Cqrs.Tests/Cqrs/DispatcherPipelineCacheRequestHandler.cs create mode 100644 GFramework.Cqrs.Tests/Cqrs/DispatcherStringCacheRequest.cs create mode 100644 GFramework.Cqrs.Tests/Cqrs/DispatcherStringCacheRequestHandler.cs diff --git a/GFramework.Cqrs.Tests/Cqrs/CqrsDispatcherCacheTests.cs b/GFramework.Cqrs.Tests/Cqrs/CqrsDispatcherCacheTests.cs index 470667ec..ee8c549a 100644 --- a/GFramework.Cqrs.Tests/Cqrs/CqrsDispatcherCacheTests.cs +++ b/GFramework.Cqrs.Tests/Cqrs/CqrsDispatcherCacheTests.cs @@ -224,124 +224,8 @@ internal sealed class CqrsDispatcherCacheTests /// private static async Task DrainAsync(IAsyncEnumerable stream) { - await foreach (var _ in stream) + await foreach (var _ in stream.ConfigureAwait(false)) { } } } - -/// -/// 用于验证 request 服务类型缓存的测试请求。 -/// -internal sealed record DispatcherCacheRequest : IRequest; - -/// -/// 用于验证 notification 服务类型缓存的测试通知。 -/// -internal sealed record DispatcherCacheNotification : INotification; - -/// -/// 用于验证 stream 服务类型缓存的测试请求。 -/// -internal sealed record DispatcherCacheStreamRequest : IStreamRequest; - -/// -/// 用于验证 pipeline invoker 缓存的测试请求。 -/// -internal sealed record DispatcherPipelineCacheRequest : IRequest; - -/// -/// 用于验证按响应类型分层 request invoker 缓存的测试请求。 -/// -internal sealed record DispatcherStringCacheRequest : IRequest; - -/// -/// 处理 。 -/// -internal sealed class DispatcherCacheRequestHandler : IRequestHandler -{ - /// - /// 返回固定结果,供缓存测试验证 dispatcher 请求路径。 - /// - public ValueTask Handle(DispatcherCacheRequest request, CancellationToken cancellationToken) - { - return ValueTask.FromResult(1); - } -} - -/// -/// 处理 。 -/// -internal sealed class DispatcherCacheNotificationHandler : INotificationHandler -{ - /// - /// 消费通知,不执行额外副作用。 - /// - public ValueTask Handle(DispatcherCacheNotification notification, CancellationToken cancellationToken) - { - return ValueTask.CompletedTask; - } -} - -/// -/// 处理 。 -/// -internal sealed class DispatcherCacheStreamHandler : IStreamRequestHandler -{ - /// - /// 返回一个最小流,供缓存测试命中 stream 分发路径。 - /// - public async IAsyncEnumerable Handle( - DispatcherCacheStreamRequest request, - [EnumeratorCancellation] CancellationToken cancellationToken) - { - yield return 1; - await Task.CompletedTask; - } -} - -/// -/// 处理 。 -/// -internal sealed class DispatcherPipelineCacheRequestHandler : IRequestHandler -{ - /// - /// 返回固定结果,供 pipeline 缓存测试使用。 - /// - public ValueTask Handle(DispatcherPipelineCacheRequest request, CancellationToken cancellationToken) - { - return ValueTask.FromResult(2); - } -} - -/// -/// 处理 。 -/// -internal sealed class DispatcherStringCacheRequestHandler : IRequestHandler -{ - /// - /// 返回固定字符串,供按响应类型缓存测试验证 string 路径。 - /// - public ValueTask Handle(DispatcherStringCacheRequest request, CancellationToken cancellationToken) - { - return ValueTask.FromResult("dispatcher-cache"); - } -} - -/// -/// 为 提供最小 pipeline 行为, -/// 用于命中 dispatcher 的 pipeline invoker 缓存分支。 -/// -internal sealed class DispatcherPipelineCacheBehavior : IPipelineBehavior -{ - /// - /// 直接转发到下一个处理器。 - /// - public ValueTask Handle( - DispatcherPipelineCacheRequest request, - MessageHandlerDelegate next, - CancellationToken cancellationToken) - { - return next(request, cancellationToken); - } -} diff --git a/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheNotification.cs b/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheNotification.cs new file mode 100644 index 00000000..00a2535c --- /dev/null +++ b/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheNotification.cs @@ -0,0 +1,8 @@ +using GFramework.Cqrs.Abstractions.Cqrs; + +namespace GFramework.Cqrs.Tests.Cqrs; + +/// +/// 用于验证 notification 服务类型缓存的测试通知。 +/// +internal sealed record DispatcherCacheNotification : INotification; diff --git a/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheNotificationHandler.cs b/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheNotificationHandler.cs new file mode 100644 index 00000000..b023398a --- /dev/null +++ b/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheNotificationHandler.cs @@ -0,0 +1,21 @@ +using System.Threading; +using GFramework.Cqrs.Abstractions.Cqrs; + +namespace GFramework.Cqrs.Tests.Cqrs; + +/// +/// 处理 。 +/// +internal sealed class DispatcherCacheNotificationHandler : INotificationHandler +{ + /// + /// 消费通知,不执行额外副作用。 + /// + /// 当前通知。 + /// 取消令牌。 + /// 已完成任务。 + public ValueTask Handle(DispatcherCacheNotification notification, CancellationToken cancellationToken) + { + return ValueTask.CompletedTask; + } +} diff --git a/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheRequest.cs b/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheRequest.cs new file mode 100644 index 00000000..005b06d0 --- /dev/null +++ b/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheRequest.cs @@ -0,0 +1,8 @@ +using GFramework.Cqrs.Abstractions.Cqrs; + +namespace GFramework.Cqrs.Tests.Cqrs; + +/// +/// 用于验证 request 服务类型缓存的测试请求。 +/// +internal sealed record DispatcherCacheRequest : IRequest; diff --git a/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheRequestHandler.cs b/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheRequestHandler.cs new file mode 100644 index 00000000..acd1f043 --- /dev/null +++ b/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheRequestHandler.cs @@ -0,0 +1,21 @@ +using System.Threading; +using GFramework.Cqrs.Abstractions.Cqrs; + +namespace GFramework.Cqrs.Tests.Cqrs; + +/// +/// 处理 。 +/// +internal sealed class DispatcherCacheRequestHandler : IRequestHandler +{ + /// + /// 返回固定结果,供缓存测试验证 dispatcher 请求路径。 + /// + /// 当前请求。 + /// 取消令牌。 + /// 固定整数结果。 + public ValueTask Handle(DispatcherCacheRequest request, CancellationToken cancellationToken) + { + return ValueTask.FromResult(1); + } +} diff --git a/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheStreamHandler.cs b/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheStreamHandler.cs new file mode 100644 index 00000000..476cbe43 --- /dev/null +++ b/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheStreamHandler.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; +using GFramework.Cqrs.Abstractions.Cqrs; + +namespace GFramework.Cqrs.Tests.Cqrs; + +/// +/// 处理 。 +/// +internal sealed class DispatcherCacheStreamHandler : IStreamRequestHandler +{ + /// + /// 返回一个最小流,供缓存测试命中 stream 分发路径。 + /// + /// 当前流请求。 + /// 取消令牌。 + /// 包含一个固定元素的异步流。 + public async IAsyncEnumerable Handle( + DispatcherCacheStreamRequest request, + [EnumeratorCancellation] CancellationToken cancellationToken) + { + yield return 1; + await Task.CompletedTask.ConfigureAwait(false); + } +} diff --git a/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheStreamRequest.cs b/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheStreamRequest.cs new file mode 100644 index 00000000..e09b23cb --- /dev/null +++ b/GFramework.Cqrs.Tests/Cqrs/DispatcherCacheStreamRequest.cs @@ -0,0 +1,8 @@ +using GFramework.Cqrs.Abstractions.Cqrs; + +namespace GFramework.Cqrs.Tests.Cqrs; + +/// +/// 用于验证 stream 服务类型缓存的测试请求。 +/// +internal sealed record DispatcherCacheStreamRequest : IStreamRequest; diff --git a/GFramework.Cqrs.Tests/Cqrs/DispatcherPipelineCacheBehavior.cs b/GFramework.Cqrs.Tests/Cqrs/DispatcherPipelineCacheBehavior.cs new file mode 100644 index 00000000..7335616c --- /dev/null +++ b/GFramework.Cqrs.Tests/Cqrs/DispatcherPipelineCacheBehavior.cs @@ -0,0 +1,26 @@ +using System.Threading; +using GFramework.Cqrs.Abstractions.Cqrs; + +namespace GFramework.Cqrs.Tests.Cqrs; + +/// +/// 为 提供最小 pipeline 行为, +/// 用于命中 dispatcher 的 pipeline invoker 缓存分支。 +/// +internal sealed class DispatcherPipelineCacheBehavior : IPipelineBehavior +{ + /// + /// 直接转发到下一个处理器。 + /// + /// 当前请求。 + /// 下一个处理器委托。 + /// 取消令牌。 + /// 下游处理器结果。 + public ValueTask Handle( + DispatcherPipelineCacheRequest request, + MessageHandlerDelegate next, + CancellationToken cancellationToken) + { + return next(request, cancellationToken); + } +} diff --git a/GFramework.Cqrs.Tests/Cqrs/DispatcherPipelineCacheRequest.cs b/GFramework.Cqrs.Tests/Cqrs/DispatcherPipelineCacheRequest.cs new file mode 100644 index 00000000..53cd733d --- /dev/null +++ b/GFramework.Cqrs.Tests/Cqrs/DispatcherPipelineCacheRequest.cs @@ -0,0 +1,8 @@ +using GFramework.Cqrs.Abstractions.Cqrs; + +namespace GFramework.Cqrs.Tests.Cqrs; + +/// +/// 用于验证 pipeline invoker 缓存的测试请求。 +/// +internal sealed record DispatcherPipelineCacheRequest : IRequest; diff --git a/GFramework.Cqrs.Tests/Cqrs/DispatcherPipelineCacheRequestHandler.cs b/GFramework.Cqrs.Tests/Cqrs/DispatcherPipelineCacheRequestHandler.cs new file mode 100644 index 00000000..d52636a1 --- /dev/null +++ b/GFramework.Cqrs.Tests/Cqrs/DispatcherPipelineCacheRequestHandler.cs @@ -0,0 +1,21 @@ +using System.Threading; +using GFramework.Cqrs.Abstractions.Cqrs; + +namespace GFramework.Cqrs.Tests.Cqrs; + +/// +/// 处理 。 +/// +internal sealed class DispatcherPipelineCacheRequestHandler : IRequestHandler +{ + /// + /// 返回固定结果,供 pipeline 缓存测试使用。 + /// + /// 当前请求。 + /// 取消令牌。 + /// 固定整数结果。 + public ValueTask Handle(DispatcherPipelineCacheRequest request, CancellationToken cancellationToken) + { + return ValueTask.FromResult(2); + } +} diff --git a/GFramework.Cqrs.Tests/Cqrs/DispatcherStringCacheRequest.cs b/GFramework.Cqrs.Tests/Cqrs/DispatcherStringCacheRequest.cs new file mode 100644 index 00000000..65821391 --- /dev/null +++ b/GFramework.Cqrs.Tests/Cqrs/DispatcherStringCacheRequest.cs @@ -0,0 +1,8 @@ +using GFramework.Cqrs.Abstractions.Cqrs; + +namespace GFramework.Cqrs.Tests.Cqrs; + +/// +/// 用于验证按响应类型分层 request invoker 缓存的测试请求。 +/// +internal sealed record DispatcherStringCacheRequest : IRequest; diff --git a/GFramework.Cqrs.Tests/Cqrs/DispatcherStringCacheRequestHandler.cs b/GFramework.Cqrs.Tests/Cqrs/DispatcherStringCacheRequestHandler.cs new file mode 100644 index 00000000..83082053 --- /dev/null +++ b/GFramework.Cqrs.Tests/Cqrs/DispatcherStringCacheRequestHandler.cs @@ -0,0 +1,21 @@ +using System.Threading; +using GFramework.Cqrs.Abstractions.Cqrs; + +namespace GFramework.Cqrs.Tests.Cqrs; + +/// +/// 处理 。 +/// +internal sealed class DispatcherStringCacheRequestHandler : IRequestHandler +{ + /// + /// 返回固定字符串,供按响应类型缓存测试验证 string 路径。 + /// + /// 当前请求。 + /// 取消令牌。 + /// 固定字符串结果。 + public ValueTask Handle(DispatcherStringCacheRequest request, CancellationToken cancellationToken) + { + return ValueTask.FromResult("dispatcher-cache"); + } +}