From 6b1220d2d5dcb5405b261e529304694c1e2983ce Mon Sep 17 00:00:00 2001
From: ruyu <bicijinlian@163.com>
Date: Mon, 18 Jun 2018 12:38:21 +0800
Subject: [PATCH] test

---
 RedisStudyTest/RedisHashStudyTest.cs | 132 ++++++++++++++++++++++-----
 1 file changed, 109 insertions(+), 23 deletions(-)

diff --git a/RedisStudyTest/RedisHashStudyTest.cs b/RedisStudyTest/RedisHashStudyTest.cs
index c9791be..8287637 100644
--- a/RedisStudyTest/RedisHashStudyTest.cs
+++ b/RedisStudyTest/RedisHashStudyTest.cs
@@ -29,6 +29,12 @@ namespace RedisStudyTest
         {
             redisDatabase = RedisHelper.GetRedisDatabase();
             hashStudy = new RedisHashStudy();
+            student = new Student()
+            {
+                Id = 1,
+                Name = "王高峰",
+                Age = 2 * 9
+            };
             students = new List<Student>()
             {
                 new Student()
@@ -67,24 +73,51 @@ namespace RedisStudyTest
         }
 
         [Fact]
-        public void AddStudentTest()
+        public void AddStudentExceptionTest()
         {
-            student = new Student()
-            {
-                Id = 1,
-                Name = "王高峰",
-                Age = 2 * 9
-            };
             string redisKey = preHashKey + student.Id;
-
-            //参数异常
+            //参数异常测试
             Assert.Throws<ArgumentNullException>(() => hashStudy.HashSet(string.Empty, null));
             Assert.Throws<ArgumentNullException>(() => hashStudy.HashSet("", null));
             Assert.Throws<ArgumentNullException>(() => hashStudy.HashSet(preHashKey + "-1", null));
             Assert.Throws<ArgumentNullException>(() => hashStudy.HashSet(preHashKey + "-1", new HashEntry[] { }));
+        }
 
-            
-            var studentEntries = new HashEntry[] 
+        [Fact]
+        public void AddStudentWhenTest()
+        {
+            string redisKey = preHashKey + student.Id;
+
+            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, "Id2", student.Id + 1, When.NotExists);
+            Assert.False(id_When_NotExists_Yes);
+
+            var id_When_Exists_Yes = hashStudy.HashSet(redisKey, "Id", student.Id + 1, When.Exists);
+            Assert.True(id_When_Exists_Yes);
+
+            var id_When_Exists_No = hashStudy.HashSet(redisKey, "Id3", student.Id + 1, When.Exists);
+            Assert.False(id_When_Exists_No);
+
+            var id_When_Always_Exists = hashStudy.HashSet(redisKey, "Id", student.Id + 1, When.Always);
+            Assert.True(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 AddStudentCommandFlagTest()
+        {
+            string redisKey = preHashKey + student.Id;
+        }
+
+        [Fact]
+        public void AddStudentTest()
+        {
+            string redisKey = preHashKey + student.Id;
+            var studentEntries = new HashEntry[]
             {
                 new HashEntry("Id",1),
                 new HashEntry("Name",student.Name),
@@ -93,18 +126,37 @@ namespace RedisStudyTest
 
             //插入Sudent
             var addHash = hashStudy.HashSet(redisKey, studentEntries, CommandFlags.None);
+            Assert.True(addHash);
+
             //设置过期
             redisDatabase.KeyExpire(redisKey, TimeSpan.FromSeconds(5));
-            Assert.True(addHash);
+        }
 
-            //更新(插入)一项
+        /// <summary>
+        /// 更新学生异常测试
+        /// </summary>
+        [Fact]
+        public void UpdateStudentExceptionTest()
+        {
+            string redisKey = preHashKey + student.Id;
+            //不存在Key
+            Assert.Throws<Exception>(()=> hashStudy.HashSet(string.Empty, "Id", -1));
+        }
 
-            var addOrUpdateOne = hashStudy.HashSet(redisKey, "Id",student.Id+1);
+        /// <summary>
+        /// 更新学生
+        /// </summary>
+        [Theory]
+        [InlineData("Id", 1)]
+        [InlineData("Name",1)]
+        [InlineData("Age",1)]
+        public void UpdateStudentTest(RedisValue fieldName, RedisValue value)
+        {
+            string redisKey = preHashKey + student.Id;
+            var addOrUpdateOne = hashStudy.HashSet(redisKey, fieldName, value+1);
             Assert.True(addOrUpdateOne);
-
             addOrUpdateOne = hashStudy.HashSet(redisKey, "Name", student.Name + 1);
             Assert.True(addOrUpdateOne);
-
             addOrUpdateOne = hashStudy.HashSet(redisKey, "Age", student.Age + 1);
             Assert.True(addOrUpdateOne);
         }
@@ -115,14 +167,14 @@ namespace RedisStudyTest
         [InlineData(-3)]
         public void DelStudentTest(int studentId)
         {
-            //Assert.False(hashStudy.DelStudentById(studentId));
+            Assert.False(redisDatabase.KeyDelete(preHashKey + studentId));
         }
 
         [Theory]
         [InlineData(-100)]
         public void DelStudentTest2(int studentId)
         {
-            //Assert.False(hashStudy.DelStudentById(studentId));
+            Assert.False(redisDatabase.KeyDelete(preHashKey + studentId));
         }
 
         [Fact]
@@ -172,11 +224,11 @@ namespace RedisStudyTest
             {
                 redisDatabase.KeyDelete(preHashKey + student.Id);
             }
-            //hashStudy.DelStudentById(student.Id);
-            //foreach (var temp in students)
-            //{
-            //    hashStudy.DelStudentById(temp.Id);
-            //}
+
+            foreach (var temp in students)
+            {
+                redisDatabase.KeyDelete(preHashKey + temp.Id);
+            }
         }
 
         #region  辅助方法
@@ -195,6 +247,40 @@ namespace RedisStudyTest
             };
             return entrys.ToArray();
         }
+
+        public Student HashEntrysToStudent(HashEntry[] hashEntrys)
+        {
+            if (hashEntrys == null)
+            {
+                return null;
+            }
+
+            if (hashEntrys.Length <= 0)
+            {
+                return null;
+            }
+
+            var student = new Student();
+            foreach (var entry in hashEntrys)
+            {
+                switch (entry.Name)
+                {
+                    case "Id":
+                        student.Id = entry.Value.IsInteger ? (int)entry.Value : default(int); ;
+                        break;
+                    case "Name":
+                        student.Name = entry.Value.ToString();
+                        break;
+                    case "Age":
+                        student.Age = entry.Value.IsInteger ? (int)entry.Value : default(int);
+                        break;
+                    default:
+                        break;
+                }
+            }
+
+            return student;
+        }
         #endregion
     }
 }