XCode/XUnitTest.XCode/Caching/SingleEntityCacheTests.cs

85 lines
2.2 KiB
C#

using System;
using System.Threading;
using NewLife.Log;
using XCode.Cache;
using XCode.Membership;
using Xunit;
namespace XUnitTest.XCode.Caching;
[TestCaseOrderer("NewLife.UnitTest.DefaultOrderer", "NewLife.UnitTest")]
public class SingleEntityCacheTests
{
static SingleEntityCacheTests() => CacheBase.Debug = true;
public SingleEntityCacheTests()
{
}
[Fact]
public void Test1()
{
var cache = new SingleEntityCache<Int32, User>();
Assert.Equal(10, cache.Expire);
Assert.Equal(60, cache.ClearPeriod);
Assert.Equal(10000, cache.MaxEntity);
Assert.False(cache.Using);
Assert.NotNull(cache.GetKeyMethod);
Assert.NotNull(cache.FindKeyMethod);
Assert.Equal(0, cache.Total);
Assert.Equal(0, cache.Success);
}
[Fact]
public void TestKey()
{
var cache = new SingleEntityCache<Int32, User> { Expire = 1 };
// 首次访问
XTrace.WriteLine("首次访问");
var user = cache[1];
Assert.Equal(0, cache.Success);
// 再次访问
XTrace.WriteLine("再次访问");
var user2 = cache[1];
Assert.Equal(1, cache.Success);
Thread.Sleep(cache.Expire * 1000 + 10);
// 三次访问
XTrace.WriteLine("三次访问");
var user3 = cache[1];
Assert.Equal(2, cache.Success);
}
[Fact]
public void TestSlave()
{
//var list = User.FindAll(null, null, null, 0, 100);
//var entity = User.Find(User._.Name == "admin");
//if (entity == null)
//{
// entity = new User { Name = "admin" };
// entity.Insert();
//}
var cache = new SingleEntityCache<Int32, User> { Expire = 1 };
cache.FindSlaveKeyMethod = k => User.Find(User._.Name == k);
cache.GetSlaveKeyMethod = e => e.Name;
// 首次访问
var user = cache.GetItemWithSlaveKey("admin");
Assert.Equal(0, cache.Success);
// 再次访问
var user2 = cache.GetItemWithSlaveKey("admin");
Assert.Equal(1, cache.Success);
Thread.Sleep(cache.Expire * 1000 + 10);
// 再次访问
var user3 = cache.GetItemWithSlaveKey("admin");
Assert.Equal(2, cache.Success);
}
}