using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using StackExchange.Redis; using Xunit; using Xunit.Extensions; using Xunit.Serialization; using Xunit.Abstractions; using Xunit.Sdk; using RedisStudyModel; using RedisStuy; namespace RedisStudyTest { /// /// Redis Hash 类型测试 /// public class RedisHashStudyTest : IDisposable { #region 初始化 private IDatabase redisDatabase = null; private RedisHashStudy hashStudy = null; private List students; private Student student = null; private string preHashKey = "RedisStudy:Student:"; private int keyExpireSeconds = 20; /// /// 构造 /// public RedisHashStudyTest() { redisDatabase = RedisHelper.GetRedisDatabase(); hashStudy = new RedisHashStudy(); student = new Student() { Id = 1, Name = "王高峰", Age = 2 * 9 }; students = new List() { new Student() { Id = 1001, Name = "王高峰", Age = 11 }, new Student() { Id = 1002, Name = "王高峰2", Age = 22 }, new Student() { Id = 1003, Name = "王高峰3", Age = 33 }, new Student() { Id = 1004, Name = "王高峰4", Age = 44 }, new Student() { Id = 1005, Name = "王高峰5", Age = 55 }, }; } #endregion #region 添加或更新学习 /// /// 参数异常 测试 /// [Fact] public void AddStudentExceptionTest() { string redisKey = preHashKey + student.Id; //参数异常测试 Assert.Throws(() => hashStudy.HashSet(string.Empty, null)); Assert.Throws(() => hashStudy.HashSet("", null)); Assert.Throws(() => hashStudy.HashSet(preHashKey + "-1", null)); Assert.Throws(() => hashStudy.HashSet(preHashKey + "-1", new HashEntry[] { })); } /// /// 参数 When 测试 /// [Fact] public void AddStudentWhenTest() { string redisKey = preHashKey + student.Id; //当前上下文不能使用: When.Exists var id_When_NotExists_No = hashStudy.HashSet(redisKey, "Id", student.Id + 1, When.NotExists); Assert.True(id_When_NotExists_No); var id_When_NotExists_Yes = hashStudy.HashSet(redisKey, "Id", student.Id + 1, When.NotExists); Assert.False(id_When_NotExists_Yes); var id_When_Always_Exists = hashStudy.HashSet(redisKey, "Id", student.Id + 1, When.Always); Assert.False(id_When_Always_Exists); var id_When_Always_NotExists = hashStudy.HashSet(redisKey, "Id4", student.Id + 1, When.Always); Assert.True(id_When_Always_NotExists); } /// /// 添加一个默认学生 测试 /// [Fact] public void AddStudentTest() { string redisKey = preHashKey + student.Id; var studentEntries = new HashEntry[] { new HashEntry("Id",1), new HashEntry("Name",student.Name), new HashEntry("Age",student.Age), }; //插入Sudent var addHash = hashStudy.HashSet(redisKey, studentEntries, CommandFlags.None); Assert.True(addHash); //设置过期 redisDatabase.KeyExpire(redisKey, TimeSpan.FromSeconds(keyExpireSeconds)); } /// /// 添加一组初始化设置的学生 测试 /// [Fact] public void AddStudentsTest() { foreach (var temp in students) { string redisKey = preHashKey + temp.Id; var studentEntries = new HashEntry[] { new HashEntry("Id", temp.Id), new HashEntry("Name", temp.Name), new HashEntry("Age", temp.Age), }; //插入Sudent var addStudent = hashStudy.HashSet(redisKey, studentEntries); Assert.True(addStudent); //设置过期 redisDatabase.KeyExpire(redisKey, TimeSpan.FromSeconds(keyExpireSeconds)); } } /// /// 添加部分字段 测试 /// [Fact] public void AddPartStudentTest() { //todo:待写 } /// /// 更新学生异常测试 /// [Fact] public void UpdateStudentExceptionTest() { string redisKey = preHashKey + student.Id; //不存在Key, 返回false,不异常 Assert.False(hashStudy.HashSet(string.Empty, "Id", -1)); } #endregion [Fact] public void Test() { Assert.IsType(1); } /// /// 清理 /// public void Dispose() { if (student != null) { redisDatabase.KeyDelete(preHashKey + student.Id); } foreach (var temp in students) { redisDatabase.KeyDelete(preHashKey + temp.Id); } } } }