using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Xunit; namespace Util.Caching.EasyCaching.Tests; /// /// Redis缓存服务测试 /// public class RedisCacheManagerTest { #region 测试初始化 /// /// 缓存服务 /// private readonly IRedisCache _cache; /// /// 测试初始化 /// /// 缓存服务 public RedisCacheManagerTest( IRedisCache cache ) { _cache = cache; } #endregion #region Get /// /// 测试获取缓存 /// [Fact] public void TestGet_1() { //变量定义 var key = "r:TestGet_1"; var value = 1; //获取缓存,结果为空 var result = _cache.Get( key ); Assert.Null( result ); //设置缓存 _cache.Set( key, value ); //验证 result = _cache.Get( key ); Assert.Equal( value, result ); } /// /// 测试获取缓存 - 设置缓存键对象 /// [Fact] public void TestGet_2() { //变量定义 var key = new CacheKey( "r:TestGet_2" ); var value = 1; //获取缓存,结果为空 var result = _cache.Get( key ); Assert.Null( result ); //设置缓存 _cache.Set( key, value ); //验证 result = _cache.Get( key ); Assert.Equal( value, result ); } /// /// 测试获取缓存 - 获取集合 /// [Fact] public void TestGet_3() { //变量定义 var key = "r:TestGet_31"; var key2 = "r:TestGet_32"; //设置缓存 _cache.Set( key, 1 ); _cache.Set( key2, 2 ); //验证 var result = _cache.Get( new []{ key , key2 } ); Assert.Equal( 1,result[0] ); Assert.Equal( 2, result[1] ); } /// /// 测试获取缓存 - 获取集合,设置缓存键对象 /// [Fact] public void TestGet_4() { //变量定义 var key = new CacheKey( "r:TestGet_41" ); var key2 = new CacheKey( "r:TestGet_42" ); //设置缓存 _cache.Set( key, 1 ); _cache.Set( key2, 2 ); //验证 var result = _cache.Get( new[] { key, key2 } ); Assert.Equal( 1, result[0] ); Assert.Equal( 2, result[1] ); } /// /// 测试从缓存中获取数据 - 默认8小时过期 /// [Fact] public void TestGet_5() { var result = 0; var data = 0; for ( int i = 0; i < 3; i++ ) { result = _cache.Get( "r:TestGet_5", () => { data++; return data; } ); } Assert.Equal( 1, result ); } /// /// 测试从缓存中获取数据 - 设置缓存键对象 /// [Fact] public void TestGet_6() { var result = 0; var data = 0; for ( int i = 0; i < 3; i++ ) { result = _cache.Get( new CacheKey( "r:TestGet_6" ), () => { data++; return data; } ); } Assert.Equal( 1, result ); } #endregion #region GetAsync /// /// 测试获取缓存 /// [Fact] public async Task TestGetAsync_1() { //变量定义 var key = "r:TestGetAsync_1"; var value = 1; //获取缓存,结果为空 var result = await _cache.GetAsync( key ); Assert.Null( result ); //设置缓存 await _cache.SetAsync( key, value ); //验证 result = await _cache.GetAsync( key ); Assert.Equal( value, result ); } /// /// 测试获取缓存 - 设置缓存键对象 /// [Fact] public async Task TestGetAsync_2() { //变量定义 var key = new CacheKey( "r:TestGetAsync_2" ); var value = 1; //获取缓存,结果为空 var result = await _cache.GetAsync( key ); Assert.Null( result ); //设置缓存 await _cache.SetAsync( key, value ); //验证 result = await _cache.GetAsync( key ); Assert.Equal( value, result ); } /// /// 测试获取缓存 - 获取集合 /// [Fact] public async Task TestGetAsync_3() { //变量定义 var key = "r:TestGetAsync_31"; var key2 = "r:TestGetAsync_32"; //设置缓存 await _cache.SetAsync( key, 1 ); await _cache.SetAsync( key2, 2 ); //验证 var result = await _cache.GetAsync( new[] { key, key2 } ); Assert.Equal( 1, result[0] ); Assert.Equal( 2, result[1] ); } /// /// 测试获取缓存 - 获取集合,设置缓存键对象 /// [Fact] public async Task TestGetAsync_4() { //变量定义 var key = new CacheKey( "r:TestGetAsync_41" ); var key2 = new CacheKey( "r:TestGetAsync_42" ); //设置缓存 await _cache.SetAsync( key, 1 ); await _cache.SetAsync( key2, 2 ); //验证 var result = await _cache.GetAsync( new[] { key, key2 } ); Assert.Equal( 1, result[0] ); Assert.Equal( 2, result[1] ); } /// /// 测试从缓存中获取数据 - 默认8小时过期 /// [Fact] public async Task TestGetAsync_5() { var result = 0; var data = 0; for ( int i = 0; i < 3; i++ ) { result = await _cache.GetAsync( "r:TestGetAsync_5", async () => { data++; return await Task.FromResult( data ); } ); } Assert.Equal( 1, result ); } #endregion #region GetByPrefix /// /// 测试通过缓存键前缀获取数据 /// [Fact] public void TestGetByPrefix_1() { //变量定义 var key = "jd:TestGetByPrefix_11"; var key2 = "jd:TestGetByPrefix_12"; //设置缓存 _cache.Set( key, 1 ); _cache.Set( key2, 2 ); //验证 var result = _cache.GetByPrefix( "jd" ).OrderBy( t => t ).ToList(); Assert.Equal( 1, result[0] ); Assert.Equal( 2, result[1] ); } #endregion #region GetByPrefixAsync /// /// 测试通过缓存键前缀获取数据 /// [Fact] public async Task TestGetByPrefixAsync_1() { //变量定义 var key = "ef:TestGetByPrefixAsync_11"; var key2 = "ef:TestGetByPrefixAsync_12"; //设置缓存 await _cache.SetAsync( key, 1 ); await _cache.SetAsync( key2, 2 ); //验证 var result = (await _cache.GetByPrefixAsync( "ef" )).OrderBy( t => t ).ToList(); Assert.Equal( 1, result[0] ); Assert.Equal( 2, result[1] ); } #endregion #region TrySet /// /// 测试设置缓存 /// [Fact] public void TestTrySet_1() { //变量定义 var key = "TestTrySet_1"; var value = 1; //获取缓存,结果为空 var result = _cache.Get( key ); Assert.Null( result ); //设置缓存1 _cache.TrySet( key, value ); result = _cache.Get( key ); Assert.Equal( value, result ); //设置缓存2,无效 _cache.TrySet( key, 2 ); result = _cache.Get( key ); Assert.Equal( value, result ); } /// /// 测试设置缓存 - 设置缓存键对象 /// [Fact] public void TestTrySet_2() { //变量定义 var key = new CacheKey( "TestTrySet_2" ); var value = 1; //获取缓存,结果为空 var result = _cache.Get( key ); Assert.Null( result ); //设置缓存1 _cache.TrySet( key, value ); result = _cache.Get( key ); Assert.Equal( value, result ); //设置缓存2,无效 _cache.TrySet( key, 2 ); result = _cache.Get( key ); Assert.Equal( value, result ); } #endregion #region TrySetAsync /// /// 测试设置缓存 /// [Fact] public async Task TestTrySetAsync_1() { //变量定义 var key = "TestTrySetAsync_1"; var value = 1; //获取缓存,结果为空 var result = await _cache.GetAsync( key ); Assert.Null( result ); //设置缓存1 await _cache.TrySetAsync( key, value ); result = await _cache.GetAsync( key ); Assert.Equal( value, result ); //设置缓存2,无效 await _cache.TrySetAsync( key, 2 ); result = await _cache.GetAsync( key ); Assert.Equal( value, result ); } /// /// 测试设置缓存 - 设置缓存键对象 /// [Fact] public async Task TestTrySetAsync_2() { //变量定义 var key = new CacheKey( "TestTrySetAsync_2" ); var value = 1; //获取缓存,结果为空 var result = await _cache.GetAsync( key ); Assert.Null( result ); //设置缓存1 await _cache.TrySetAsync( key, value ); result = await _cache.GetAsync( key ); Assert.Equal( value, result ); //设置缓存2,无效 await _cache.TrySetAsync( key, 2 ); result = await _cache.GetAsync( key ); Assert.Equal( value, result ); } #endregion #region Set /// /// 测试设置缓存 /// [Fact] public void TestSet_1() { //变量定义 var key = "TestSet_1"; //获取缓存,结果为空 var result = _cache.Get( key ); Assert.Null( result ); //设置缓存1 _cache.Set( key, 1 ); result = _cache.Get( key ); Assert.Equal( 1, result ); //设置缓存2,覆盖 _cache.Set( key, 2 ); result = _cache.Get( key ); Assert.Equal( 2, result ); } /// /// 测试设置缓存- 设置缓存键对象 /// [Fact] public void TestSet_2() { //变量定义 var key = new CacheKey( "TestSet_2" ); //获取缓存,结果为空 var result = _cache.Get( key ); Assert.Null( result ); //设置缓存1 _cache.Set( key, 1 ); result = _cache.Get( key ); Assert.Equal( 1, result ); //设置缓存2,覆盖 _cache.Set( key, 2 ); result = _cache.Get( key ); Assert.Equal( 2, result ); } /// /// 测试设置缓存 - 设置集合 /// [Fact] public void TestSet_3() { //变量定义 var key = "TestSet_31"; var key2 = "TestSet_32"; //设置缓存 _cache.Set( new Dictionary{{key,1}, { key2, 2 } } ); //验证 Assert.Equal( 1, _cache.Get( key ) ); Assert.Equal( 2, _cache.Get( key2 ) ); } /// /// 测试设置缓存 - 设置集合,设置缓存键对象 /// [Fact] public void TestSet_4() { //变量定义 var key = new CacheKey( "TestSet_41" ); var key2 = new CacheKey( "TestSet_42" ); //设置缓存 _cache.Set( new Dictionary { { key, 1 }, { key2, 2 } } ); //验证 Assert.Equal( 1, _cache.Get( key ) ); Assert.Equal( 2, _cache.Get( key2 ) ); } #endregion #region SetAsync /// /// 测试设置缓存 /// [Fact] public async Task TestSetAsync_1() { //变量定义 var key = "TestSetAsync_1"; //获取缓存,结果为空 var result = await _cache.GetAsync( key ); Assert.Null( result ); //设置缓存1 await _cache.SetAsync( key, 1 ); result = await _cache.GetAsync( key ); Assert.Equal( 1, result ); //设置缓存2,覆盖 await _cache.SetAsync( key, 2 ); result = await _cache.GetAsync( key ); Assert.Equal( 2, result ); } /// /// 测试设置缓存 - 设置缓存键对象 /// [Fact] public async Task TestSetAsync_2() { //变量定义 var key = new CacheKey( "TestSetAsync_2" ); //获取缓存,结果为空 var result = await _cache.GetAsync( key ); Assert.Null( result ); //设置缓存1 await _cache.SetAsync( key, 1 ); result = await _cache.GetAsync( key ); Assert.Equal( 1, result ); //设置缓存2,覆盖 await _cache.SetAsync( key, 2 ); result = await _cache.GetAsync( key ); Assert.Equal( 2, result ); } /// /// 测试设置缓存 - 设置集合 /// [Fact] public async Task TestSetAsync_3() { //变量定义 var key = "TestSetAsync_31"; var key2 = "TestSetAsync_32"; //设置缓存 await _cache.SetAsync( new Dictionary { { key, 1 }, { key2, 2 } } ); //验证 Assert.Equal( 1, await _cache.GetAsync( key ) ); Assert.Equal( 2, await _cache.GetAsync( key2 ) ); } /// /// 测试设置缓存 - 设置集合,设置缓存键对象 /// [Fact] public async Task TestSetAsync_4() { //变量定义 var key = new CacheKey( "TestSetAsync_41" ); var key2 = new CacheKey( "TestSetAsync_42" ); //设置缓存 await _cache.SetAsync( new Dictionary { { key, 1 }, { key2, 2 } } ); //验证 Assert.Equal( 1, await _cache.GetAsync( key ) ); Assert.Equal( 2, await _cache.GetAsync( key2 ) ); } #endregion #region Exists /// /// 测试缓存是否已存在 /// [Fact] public void TestExists_1() { //变量定义 var key = "TestExists_1"; //缓存不存在 Assert.False( _cache.Exists( key ) ); //设置缓存 _cache.Set( key, 1 ); //验证 Assert.True( _cache.Exists( key ) ); } /// /// 测试缓存是否已存在- 设置缓存键对象 /// [Fact] public void TestExists_2() { //变量定义 var key = new CacheKey( "TestExists_2" ); //缓存不存在 Assert.False( _cache.Exists( key ) ); //设置缓存 _cache.Set( key, 1 ); //验证 Assert.True( _cache.Exists( key ) ); } #endregion #region ExistsAsync /// /// 测试缓存是否已存在 /// [Fact] public async Task TestExistsAsync_1() { //变量定义 var key = "TestExistsAsync_1"; //缓存不存在 Assert.False( await _cache.ExistsAsync( key ) ); //设置缓存 await _cache.SetAsync( key, 1 ); //验证 Assert.True( await _cache.ExistsAsync( key ) ); } /// /// 测试缓存是否已存在 - 设置缓存键对象 /// [Fact] public async Task TestExistsAsync_2() { //变量定义 var key = new CacheKey( "TestExistsAsync_2" ); //缓存不存在 Assert.False( await _cache.ExistsAsync( key ) ); //设置缓存 await _cache.SetAsync( key, 1 ); //验证 Assert.True( await _cache.ExistsAsync( key ) ); } #endregion #region Remove /// /// 测试移除缓存 /// [Fact] public void TestRemove_1() { //变量定义 var key = "TestRemove_1"; //设置缓存 _cache.Set( key, 1 ); Assert.True( _cache.Exists( key ) ); //移除缓存 _cache.Remove( key ); //验证 Assert.False( _cache.Exists( key ) ); } /// /// 测试移除缓存 - 设置缓存键对象 /// [Fact] public void TestRemove_2() { //变量定义 var key = new CacheKey( "TestRemove_2" ); //设置缓存 _cache.Set( key, 1 ); Assert.True( _cache.Exists( key ) ); //移除缓存 _cache.Remove( key ); //验证 Assert.False( _cache.Exists( key ) ); } /// /// 测试移除缓存集合 /// [Fact] public void TestRemove_3() { //变量定义 var key = "TestRemove_31"; var key2 = "TestRemove_32"; //设置缓存 _cache.Set( key, 1 ); _cache.Set( key2, 2 ); //移除缓存 _cache.Remove( new[] { key, key2 } ); //验证 Assert.False( _cache.Exists( key ) ); Assert.False( _cache.Exists( key2 ) ); } /// /// 测试移除缓存集合 - 设置缓存键对象 /// [Fact] public void TestRemove_4() { //变量定义 var key = new CacheKey( "TestRemove_41" ); var key2 = new CacheKey( "TestRemove_42" ); //设置缓存 _cache.Set( key, 1 ); _cache.Set( key2, 2 ); //移除缓存 _cache.Remove( new[] { key, key2 } ); //验证 Assert.False( _cache.Exists( key ) ); Assert.False( _cache.Exists( key2 ) ); } #endregion #region RemoveAsync /// /// 测试移除缓存 /// [Fact] public async Task TestRemoveAsync_1() { //变量定义 var key = "TestRemoveAsync_1"; //设置缓存 await _cache.SetAsync( key, 1 ); Assert.True( await _cache.ExistsAsync( key ) ); //移除缓存 await _cache.RemoveAsync( key ); //验证 Assert.False( await _cache.ExistsAsync( key ) ); } /// /// 测试移除缓存 - 设置缓存键对象 /// [Fact] public async Task TestRemoveAsync_2() { //变量定义 var key = new CacheKey( "TestRemoveAsync_2" ); //设置缓存 await _cache.SetAsync( key, 1 ); Assert.True( await _cache.ExistsAsync( key ) ); //移除缓存 await _cache.RemoveAsync( key ); //验证 Assert.False( await _cache.ExistsAsync( key ) ); } /// /// 测试移除缓存集合 /// [Fact] public async Task TestRemoveAsync_3() { //变量定义 var key = "TestRemoveAsync_31"; var key2 = "TestRemoveAsync_32"; //设置缓存 await _cache.SetAsync( key, 1 ); await _cache.SetAsync( key2, 2 ); //移除缓存 await _cache.RemoveAsync( new[] { key, key2 } ); //验证 Assert.False( await _cache.ExistsAsync( key ) ); Assert.False( await _cache.ExistsAsync( key2 ) ); } /// /// 测试移除缓存集合 - 设置缓存键对象 /// [Fact] public async Task TestRemoveAsync_4() { //变量定义 var key = new CacheKey( "TestRemoveAsync_41" ); var key2 = new CacheKey( "TestRemoveAsync_42" ); //设置缓存 await _cache.SetAsync( key, 1 ); await _cache.SetAsync( key2, 2 ); //移除缓存 await _cache.RemoveAsync( new[] { key, key2 } ); //验证 Assert.False( await _cache.ExistsAsync( key ) ); Assert.False( await _cache.ExistsAsync( key2 ) ); } #endregion #region RemoveByPrefix /// /// 测试通过缓存键前缀移除缓存 /// [Fact] public void RemoveByPrefix_1() { //变量定义 var key = "RemoveByPrefix_11"; var key2 = "RemoveByPrefix_12"; //设置缓存 _cache.Set( key, 1 ); _cache.Set( key2, 2 ); //移除缓存 _cache.RemoveByPrefix( "RemoveByPrefix" ); //验证 Assert.False( _cache.Exists( key ) ); Assert.False( _cache.Exists( key2 ) ); } #endregion #region RemoveByPrefixAsync /// /// 测试通过缓存键前缀移除缓存 /// [Fact] public async Task RemoveByPrefixAsync_1() { //变量定义 var key = "RemoveByPrefixAsync_11"; var key2 = "RemoveByPrefixAsync_12"; //设置缓存 await _cache.SetAsync( key, 1 ); await _cache.SetAsync( key2, 2 ); //移除缓存 await _cache.RemoveByPrefixAsync( "RemoveByPrefix" ); //验证 Assert.False( await _cache.ExistsAsync( key ) ); Assert.False( await _cache.ExistsAsync( key2 ) ); } #endregion #region RemoveByPattern /// /// 测试通过缓存键模式移除缓存 /// [Fact] public void RemoveByPattern() { //变量定义 var key = "RemoveByPattern_1"; var key2 = "RemoveByPattern_2"; //设置缓存 _cache.Set( key, 1 ); _cache.Set( key2, 2 ); //移除缓存 _cache.RemoveByPattern( "*2" ); //验证 Assert.True( _cache.Exists( key ) ); Assert.False( _cache.Exists( key2 ) ); } #endregion #region RemoveByPatternAsync /// /// 测试通过缓存键模式移除缓存 /// [Fact] public async Task RemoveByPatternAsync() { //变量定义 var key = "RemoveByPatternAsync_1"; var key2 = "RemoveByPatternAsync_2"; //设置缓存 await _cache.SetAsync( key, 1 ); await _cache.SetAsync( key2, 2 ); //移除缓存 await _cache.RemoveByPatternAsync( "*2" ); //验证 Assert.True( await _cache.ExistsAsync( key ) ); Assert.False( await _cache.ExistsAsync( key2 ) ); } #endregion #region Clear /// /// 测试清空缓存 /// [Fact] public void TestClear() { //变量定义 var key = "TestClear_1"; var key2 = "TestClear_2"; //设置缓存 _cache.Set( key, 1 ); _cache.Set( key2, 2 ); //清空缓存 _cache.Clear(); //验证 Assert.False( _cache.Exists( key ) ); Assert.False( _cache.Exists( key2 ) ); } #endregion #region ClearAsync /// /// 测试清空缓存 /// [Fact] public async Task TestClearAsync() { //变量定义 var key = "TestClear_1"; var key2 = "TestClear_2"; //设置缓存 await _cache.SetAsync( key, 1 ); await _cache.SetAsync( key2, 2 ); //清空缓存 await _cache.ClearAsync(); //验证 Assert.False( await _cache.ExistsAsync( key ) ); Assert.False( await _cache.ExistsAsync( key2 ) ); } #endregion }