GFramework/GFramework.Core.Tests/Rule/ContextAwareTests.cs
gewuyou e3fa0db992 refactor(core): 收敛单活动上下文与预冻结查询
- 收敛 GameContext 为单活动上下文模型并保留类型别名兼容查找

- 统一 MicrosoftDiContainer 预冻结实例读取路径并补充 CQRS 注册阶段提示

- 更新 Core 测试、上下文文档与 ai-plan 追踪记录
2026-05-07 08:58:09 +08:00

98 lines
3.0 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.

// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Core.Abstractions.Architectures;
using GFramework.Core.Abstractions.Rule;
using GFramework.Core.Architectures;
using GFramework.Core.Rule;
using GFramework.Core.Tests.Architectures;
namespace GFramework.Core.Tests.Rule;
/// <summary>
/// 测试 ContextAware 功能的单元测试类
/// 验证上下文感知对象的设置、获取和回调功能
/// </summary>
[TestFixture]
public class ContextAwareTests
{
/// <summary>
/// 在每个测试方法执行前进行初始化设置
/// 创建测试用的 ContextAware 对象和模拟上下文,并绑定到游戏上下文中
/// </summary>
[SetUp]
public void SetUp()
{
_contextAware = new TestContextAware();
_mockContext = new TestArchitectureContext();
GameContext.Bind(typeof(TestArchitectureContext), _mockContext);
}
/// <summary>
/// 在每个测试方法执行后进行清理工作
/// 从游戏上下文中解绑测试用的架构上下文类型
/// </summary>
[TearDown]
public void TearDown()
{
GameContext.Unbind(typeof(TestArchitectureContext));
}
private TestContextAware _contextAware = null!;
private TestArchitectureContext _mockContext = null!;
/// <summary>
/// 测试 SetContext 方法是否正确设置上下文属性
/// 验证通过 IContextAware 接口设置上下文后,内部的 PublicContext 属性能够正确返回设置的上下文
/// </summary>
[Test]
public void SetContext_Should_Set_Context_Property()
{
IContextAware aware = _contextAware;
aware.SetContext(_mockContext);
Assert.That(_contextAware.PublicContext, Is.SameAs(_mockContext));
}
/// <summary>
/// 测试 SetContext 方法是否正确调用 OnContextReady 回调方法
/// 验证设置上下文后OnContextReady 方法被正确触发
/// </summary>
[Test]
public void SetContext_Should_Call_OnContextReady()
{
IContextAware aware = _contextAware;
aware.SetContext(_mockContext);
Assert.That(_contextAware.OnContextReadyCalled, Is.True);
}
/// <summary>
/// 测试 GetContext 方法是否返回已设置的上下文
/// 验证通过 IContextAware 接口设置上下文后GetContext 方法能正确返回相同的上下文实例
/// </summary>
[Test]
public void GetContext_Should_Return_Set_Context()
{
IContextAware aware = _contextAware;
aware.SetContext(_mockContext);
var result = aware.GetContext();
Assert.That(result, Is.SameAs(_mockContext));
}
/// <summary>
/// 测试 GetContext 方法在未设置上下文时会回退到当前活动上下文
/// </summary>
[Test]
public void GetContext_Should_Return_CurrentArchitectureContext_When_Not_Set()
{
IContextAware aware = _contextAware;
var result = aware.GetContext();
Assert.That(result, Is.SameAs(_mockContext));
}
}