GFramework/GFramework.Core.Tests/query/QueryExecutorTests.cs
GeWuYou c8be4b317d refactor(core): 将命令和查询总线重构为执行器模式
- 将 CommandBus 重命名为 CommandExecutor 并更新相关接口
- 将 QueryBus 重命名为 QueryExecutor 并更新相关接口
- 将 AsyncQueryBus 重命名为 AsyncQueryExecutor 并更新相关接口
- 更新 ArchitectureContext 中的服务引用和错误消息
- 修改 ArchitectureServices 中的私有字段和公共属性名称
- 更新所有测试文件中的实例变量和服务引用
- 修改测试类名称以匹配新的执行器命名
- 更新状态机系统测试中的容器注册项
2026-02-05 12:46:44 +08:00

125 lines
3.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using GFramework.Core.Abstractions.query;
using GFramework.Core.query;
using NUnit.Framework;
namespace GFramework.Core.Tests.query;
/// <summary>
/// 查询总线测试类用于测试QueryBus的功能和异常处理
/// </summary>
[TestFixture]
public class QueryExecutorTests
{
/// <summary>
/// 测试设置方法,在每个测试方法执行前初始化查询总线实例
/// </summary>
[SetUp]
public void SetUp()
{
_queryExecutor = new QueryExecutor();
}
private QueryExecutor _queryExecutor = null!;
/// <summary>
/// 测试Send方法是否能正确返回查询结果
/// 验证当传入有效查询对象时,能够得到预期的计算结果
/// </summary>
[Test]
public void Send_Should_Return_Query_Result()
{
var input = new TestQueryInput { Value = 10 };
var query = new TestQuery(input);
var result = _queryExecutor.Send(query);
Assert.That(result, Is.EqualTo(20));
}
/// <summary>
/// 测试Send方法在传入空查询对象时是否会抛出ArgumentNullException异常
/// 验证参数验证功能的正确性
/// </summary>
[Test]
public void Send_WithNullQuery_Should_ThrowArgumentNullException()
{
Assert.Throws<ArgumentNullException>(() => _queryExecutor.Send<int>(null!));
}
/// <summary>
/// 测试Send方法是否能正确返回字符串类型的查询结果
/// 验证不同返回类型的支持情况
/// </summary>
[Test]
public void Send_WithStringResult_Should_Return_String()
{
var input = new TestQueryInput { Value = 5 };
var query = new TestStringQuery(input);
var result = _queryExecutor.Send(query);
Assert.That(result, Is.EqualTo("Result: 10"));
}
}
/// <summary>
/// 测试用查询输入类实现IQueryInput接口
/// 用于传递查询所需的参数信息
/// </summary>
public sealed class TestQueryInput : IQueryInput
{
/// <summary>
/// 获取或设置查询值
/// </summary>
public int Value { get; init; }
}
/// <summary>
/// 整数类型测试查询类继承自AbstractQuery
/// 实现具体的查询逻辑并返回整数结果
/// </summary>
public sealed class TestQuery : AbstractQuery<TestQueryInput, int>
{
/// <summary>
/// 初始化TestQuery的新实例
/// </summary>
/// <param name="input">查询输入参数</param>
public TestQuery(TestQueryInput input) : base(input)
{
}
/// <summary>
/// 执行查询操作的具体实现
/// </summary>
/// <param name="input">查询输入参数</param>
/// <returns>查询结果将输入值乘以2</returns>
protected override int OnDo(TestQueryInput input)
{
return input.Value * 2;
}
}
/// <summary>
/// 字符串类型测试查询类继承自AbstractQuery
/// 实现具体的查询逻辑并返回字符串结果
/// </summary>
public sealed class TestStringQuery : AbstractQuery<TestQueryInput, string>
{
/// <summary>
/// 初始化TestStringQuery的新实例
/// </summary>
/// <param name="input">查询输入参数</param>
public TestStringQuery(TestQueryInput input) : base(input)
{
}
/// <summary>
/// 执行查询操作的具体实现
/// </summary>
/// <param name="input">查询输入参数</param>
/// <returns>格式化的字符串结果</returns>
protected override string OnDo(TestQueryInput input)
{
return $"Result: {input.Value * 2}";
}
}