using GFramework.Core.Abstractions.Architectures; using GFramework.Core.Architectures; namespace GFramework.Core.Tests.Architectures; /// /// ContextProvider 相关类的单元测试 /// 测试内容包括: /// - GameContextProvider 获取第一个架构上下文 /// - GameContextProvider 尝试获取指定类型的上下文 /// - ScopedContextProvider 获取绑定的上下文 /// - ScopedContextProvider 尝试获取指定类型的上下文 /// - ScopedContextProvider 类型不匹配时返回 false /// [TestFixture] public class ContextProviderTests { /// /// 测试初始化方法,在每个测试方法执行前清空 GameContext /// [SetUp] public void SetUp() { GameContext.Clear(); } /// /// 测试清理方法,在每个测试方法执行后清空 GameContext /// [TearDown] public void TearDown() { GameContext.Clear(); } /// /// 测试 GameContextProvider 是否能正确获取第一个架构上下文 /// [Test] public void GameContextProvider_GetContext_Should_Return_First_Context() { var context = new TestArchitectureContext(); GameContext.Bind(typeof(TestArchitecture), context); var provider = new GameContextProvider(); var result = provider.GetContext(); Assert.That(result, Is.SameAs(context)); } /// /// 测试 GameContextProvider 在没有上下文时是否抛出异常 /// [Test] public void GameContextProvider_GetContext_Should_Throw_When_Empty() { var provider = new GameContextProvider(); Assert.Throws(() => provider.GetContext()); } /// /// 测试 GameContextProvider 的 TryGetContext 方法在找到上下文时返回 true /// [Test] public void GameContextProvider_TryGetContext_Should_Return_True_When_Found() { var context = new TestArchitectureContext(); GameContext.Bind(typeof(TestArchitectureContext), context); var provider = new GameContextProvider(); var result = provider.TryGetContext(out var foundContext); Assert.That(result, Is.True); Assert.That(foundContext, Is.SameAs(context)); } /// /// 测试 GameContextProvider 的 TryGetContext 方法在未找到上下文时返回 false /// [Test] public void GameContextProvider_TryGetContext_Should_Return_False_When_Not_Found() { var provider = new GameContextProvider(); var result = provider.TryGetContext(out var foundContext); Assert.That(result, Is.False); Assert.That(foundContext, Is.Null); } /// /// 测试 ScopedContextProvider 是否能正确返回绑定的上下文 /// [Test] public void ScopedContextProvider_GetContext_Should_Return_Bound_Context() { var context = new TestArchitectureContext(); var provider = new ScopedContextProvider(context); var result = provider.GetContext(); Assert.That(result, Is.SameAs(context)); } /// /// 测试 ScopedContextProvider 的 TryGetContext 方法在类型匹配时返回 true /// [Test] public void ScopedContextProvider_TryGetContext_Should_Return_True_When_Type_Matches() { var context = new TestArchitectureContext(); var provider = new ScopedContextProvider(context); var result = provider.TryGetContext(out var foundContext); Assert.That(result, Is.True); Assert.That(foundContext, Is.SameAs(context)); } /// /// 测试 ScopedContextProvider 的 TryGetContext 方法在类型不匹配时返回 false /// [Test] public void ScopedContextProvider_TryGetContext_Should_Return_False_When_Type_Does_Not_Match() { var context = new TestArchitectureContext(); var provider = new ScopedContextProvider(context); var result = provider.TryGetContext(out var foundContext); Assert.That(result, Is.False); Assert.That(foundContext, Is.Null); } /// /// 测试 ScopedContextProvider 的 TryGetContext 方法支持接口类型查询 /// [Test] public void ScopedContextProvider_TryGetContext_Should_Support_Interface_Type() { var context = new TestArchitectureContext(); var provider = new ScopedContextProvider(context); var result = provider.TryGetContext(out var foundContext); Assert.That(result, Is.True); Assert.That(foundContext, Is.SameAs(context)); } } /// /// 另一个测试用的架构上下文类,用于测试类型不匹配的情况 /// public class AnotherTestArchitectureContext : TestArchitectureContext { }