PropertyChanged事件测试:这是一个好方法吗?

bni*_*dyc 10 .net c# wpf mstest mvvm

我正在使用MVVM模式开发WPF应用程序.我有ViewModel,代码如下:

public bool EditModeEnabled
{
    get { return _EditModeEnabled; }
    set
    {
        _ModeEditModeEnabled = value;
        OnPropertyChanged("EditModeEnabled");
        OnPropertyChanged("CommentTextBoxVisibility");
    }
}
Run Code Online (Sandbox Code Playgroud)

OnPropertyChanged是引发PropertyChanged事件的基类的虚方法.我想测试PropertyChanged事件提升,并测试我的测试方法:

public void EditModeEnabledTest()
{
    var imageViewModel = TestHelper.GetTestImageViewModel();
    var firedEvents = new List<string>();
    imageViewModel.PropertyChanged += ((sender, e) => firedEvents.Add(e.PropertyName));
    imageViewModel.Mode = true;
    Assert.AreEqual(firedEvents.Count, 2);
    Assert.IsTrue(firedEvents.Contains("EditModeEnabled"));
    Assert.IsTrue(firedEvents.Contains("CommentTextBoxVisibility"));
    ...
}
Run Code Online (Sandbox Code Playgroud)

这是测试ProprtyChanged事件的好方法吗?

Mar*_*ann 11

我使用一点Fluent API来做到这一点.它允许你编写这样的测试:

var imageViewModel = TestHelper.GetTestImageViewModel();
imageViewModel.ShouldNotifyOn(s => s.EditModeEnabled)
    When(s => s.Mode = true);
Run Code Online (Sandbox Code Playgroud)

除了简洁之外,我更喜欢这种方法,因为它是类型安全的 - 没有字符串值可以与您的API保持同步.

要测试为多个属​​性引发事件,您可以编写另一个执行此操作的测试.这将为您提供许多测试,但每个测试都非常小,您可以避免使用断言轮盘.