public static void RunVerificationTest <M, T>(M vm, string propertyName, T value1, T value2) where M : System.ComponentModel.INotifyPropertyChanged, new() { Assert.AreNotEqual(value1, value2, "Test error: cannot run test with two equal values"); // Setup PropertyInfo property = typeof(M).GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.SetProperty); Assert.IsNotNull(property, "Test error: Cannot find public property (get and set ) {0}", propertyName); Action <T> setProperty = (v) => property.SetValue(vm, v); Func <T> getProperty = () => (T)property.GetValue(vm); setProperty(value1); Assert.AreEqual(value1, getProperty(), "Test error: getProperty and setProperty are not working as expected"); ViewModelVerifier verifier = new ViewModelVerifier(vm); // Change setProperty(value2); verifier.AssertSinglePropertyChange(propertyName); verifier.Reset(); // No change setProperty(value2); verifier.AssertNoPropertChanges(); // Change again setProperty(value1); verifier.AssertSinglePropertyChange(propertyName); }