mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 19:03:29 +08:00
- 在AsyncTestModel和TestModel中添加override关键字修复方法重写 - 调整GFramework.Core.Tests和GFramework.SourceGenerators.Tests的目标框架顺序为net10.0;net8.0 - 优化SyncArchitectureTests中的注释格式,统一添加前导空格 - 移除TestQuery相关代码文件 - 新增BindablePropertyTests测试绑定属性功能 - 新增CommandBusTests测试命令总线功能 - 新增EasyEventsTests和EventTests测试事件系统功能 - 新增IocContainerTests测试依赖注入容器功能 - 新增ObjectExtensionsTests测试对象扩展方法功能 - 新增ObjectPoolTests测试对象池功能 - 新增OrEventTests测试或事件功能 - 新增QueryBusTests测试查询总线功能 - [skip ci]
131 lines
3.0 KiB
C#
131 lines
3.0 KiB
C#
using GFramework.Core.Abstractions.pool;
|
|
using GFramework.Core.pool;
|
|
using NUnit.Framework;
|
|
|
|
namespace GFramework.Core.Tests.pool;
|
|
|
|
[TestFixture]
|
|
public class ObjectPoolTests
|
|
{
|
|
[SetUp]
|
|
public void SetUp()
|
|
{
|
|
_pool = new TestObjectPool();
|
|
}
|
|
|
|
private TestObjectPool _pool = null!;
|
|
|
|
[Test]
|
|
public void Acquire_Should_Create_New_Object_When_Pool_Empty()
|
|
{
|
|
var obj = _pool.Acquire("test");
|
|
|
|
Assert.That(obj, Is.Not.Null);
|
|
Assert.That(obj.PoolKey, Is.EqualTo("test"));
|
|
Assert.That(obj.OnAcquireCalled, Is.True);
|
|
}
|
|
|
|
[Test]
|
|
public void Acquire_Should_Return_Pooled_Object()
|
|
{
|
|
var obj1 = _pool.Acquire("test");
|
|
obj1.TestValue = 100;
|
|
|
|
_pool.Release("test", obj1);
|
|
|
|
var obj2 = _pool.Acquire("test");
|
|
|
|
Assert.That(obj2, Is.SameAs(obj1));
|
|
Assert.That(obj2.TestValue, Is.EqualTo(100));
|
|
Assert.That(obj2.OnAcquireCalled, Is.True);
|
|
}
|
|
|
|
[Test]
|
|
public void Release_Should_Call_OnRelease()
|
|
{
|
|
var obj = _pool.Acquire("test");
|
|
|
|
_pool.Release("test", obj);
|
|
|
|
Assert.That(obj.OnReleaseCalled, Is.True);
|
|
}
|
|
|
|
[Test]
|
|
public void Clear_Should_Destroy_All_Objects()
|
|
{
|
|
var obj1 = _pool.Acquire("key1");
|
|
var obj2 = _pool.Acquire("key2");
|
|
|
|
_pool.Release("key1", obj1);
|
|
_pool.Release("key2", obj2);
|
|
|
|
_pool.Clear();
|
|
|
|
Assert.That(obj1.OnPoolDestroyCalled, Is.True);
|
|
Assert.That(obj2.OnPoolDestroyCalled, Is.True);
|
|
}
|
|
|
|
[Test]
|
|
public void Multiple_Pools_Should_Be_Independent()
|
|
{
|
|
var obj1 = _pool.Acquire("key1");
|
|
var obj2 = _pool.Acquire("key2");
|
|
|
|
_pool.Release("key1", obj1);
|
|
|
|
var obj3 = _pool.Acquire("key1");
|
|
var obj4 = _pool.Acquire("key2");
|
|
|
|
Assert.That(obj3, Is.SameAs(obj1));
|
|
Assert.That(obj4, Is.Not.SameAs(obj2));
|
|
}
|
|
|
|
[Test]
|
|
public void OnAcquire_Should_Be_Called_On_New_And_Pooled_Objects()
|
|
{
|
|
var obj1 = _pool.Acquire("test");
|
|
Assert.That(obj1.OnAcquireCalled, Is.True);
|
|
|
|
_pool.Release("test", obj1);
|
|
obj1.OnAcquireCalled = false;
|
|
|
|
var obj2 = _pool.Acquire("test");
|
|
Assert.That(obj2.OnAcquireCalled, Is.True);
|
|
}
|
|
}
|
|
|
|
public class TestObjectPool : AbstractObjectPoolSystem<string, TestPoolableObject>
|
|
{
|
|
protected override TestPoolableObject Create(string key)
|
|
{
|
|
return new TestPoolableObject { PoolKey = key };
|
|
}
|
|
|
|
protected override void OnInit()
|
|
{
|
|
}
|
|
}
|
|
|
|
public class TestPoolableObject : IPoolableObject
|
|
{
|
|
public string PoolKey { get; set; } = string.Empty;
|
|
public int TestValue { get; set; }
|
|
public bool OnAcquireCalled { get; set; }
|
|
public bool OnReleaseCalled { get; set; }
|
|
public bool OnPoolDestroyCalled { get; set; }
|
|
|
|
public void OnAcquire()
|
|
{
|
|
OnAcquireCalled = true;
|
|
}
|
|
|
|
public void OnRelease()
|
|
{
|
|
OnReleaseCalled = true;
|
|
}
|
|
|
|
public void OnPoolDestroy()
|
|
{
|
|
OnPoolDestroyCalled = true;
|
|
}
|
|
} |