OSDN Git Service

INotifyPropertyChangedのテストにAssert.PropertyChangedを使用する
authorKimura Youichi <kim.upsilon@bucyou.net>
Fri, 24 Feb 2017 17:15:56 +0000 (02:15 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Fri, 24 Feb 2017 17:53:17 +0000 (02:53 +0900)
Assert.PropertyChanged は xUnit.net 2.2 よりも前から存在していたらしい

OpenTween.Tests/Models/PostFilterRuleTest.cs
OpenTween.Tests/TestUtils.cs

index e8cca40..a960077 100644 (file)
@@ -1439,12 +1439,11 @@ namespace OpenTween.Models
         {
             var filter = new PostFilterRule();
 
-            string changedPropeyty = null;
+            Assert.PropertyChanged(
+                filter, "FilterName",
+                () => filter.FilterName = "hogehoge"
+            );
 
-            filter.PropertyChanged += (_, x) => changedPropeyty = x.PropertyName;
-            filter.FilterName = "hogehoge";
-
-            Assert.Equal("FilterName", changedPropeyty);
             Assert.True(filter.IsDirty);
         }
 
@@ -1455,13 +1454,12 @@ namespace OpenTween.Models
             filter.FilterName = "hogehoge";
             filter.Compile();
 
-            string changedPropeyty = null;
-
             // 値に変化がないので PropertyChanged イベントは発生しない
-            filter.PropertyChanged += (_, x) => changedPropeyty = x.PropertyName;
-            filter.FilterName = "hogehoge";
+            TestUtils.NotPropertyChanged(
+                filter, "FilterName",
+                () => filter.FilterName = "hogehoge"
+            );
 
-            Assert.Null(changedPropeyty);
             Assert.False(filter.IsDirty);
         }
 
index 7ec9fef..58d70fc 100644 (file)
@@ -74,6 +74,25 @@ namespace OpenTween
             }
         }
 
+        public static void NotPropertyChanged(INotifyPropertyChanged @object, string propertyName, Action testCode)
+        {
+            PropertyChangedEventHandler handler = (s, e) =>
+            {
+                if (s == @object && e.PropertyName == propertyName)
+                    throw new Xunit.Sdk.PropertyChangedException(propertyName);
+            };
+
+            try
+            {
+                @object.PropertyChanged += handler;
+                testCode();
+            }
+            finally
+            {
+                @object.PropertyChanged -= handler;
+            }
+        }
+
         public static MemoryImage CreateDummyImage()
         {
             using (var bitmap = new Bitmap(100, 100))