【发布时间】:2010-09-19 22:10:52
【问题描述】:
我有一些引发PropertyChanged 事件的代码,我希望能够对这些事件进行正确引发的单元测试。
引发事件的代码是这样的
public class MyClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
public string MyProperty
{
set
{
if (_myProperty != value)
{
_myProperty = value;
NotifyPropertyChanged("MyProperty");
}
}
}
}
在我的单元测试中,我从以下代码中得到了一个不错的绿色测试,它使用了委托:
[TestMethod]
public void Test_ThatMyEventIsRaised()
{
string actual = null;
MyClass myClass = new MyClass();
myClass.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
{
actual = e.PropertyName;
};
myClass.MyProperty = "testing";
Assert.IsNotNull(actual);
Assert.AreEqual("MyProperty", actual);
}
但是,如果我尝试将属性设置链接在一起,如下所示:
public string MyProperty
{
set
{
if (_myProperty != value)
{
_myProperty = value;
NotifyPropertyChanged("MyProperty");
MyOtherProperty = "SomeValue";
}
}
}
public string MyOtherProperty
{
set
{
if (_myOtherProperty != value)
{
_myOtherProperty = value;
NotifyPropertyChanged("MyOtherProperty");
}
}
}
我的事件测试失败 - 它捕获的事件是 MyOtherProperty 的事件。
我很确定事件会触发,我的 UI 会像它一样做出反应,但我的委托只捕获最后一个触发的事件。
所以我想知道:
1. 我测试事件的方法正确吗?
2. 我提出 chained 事件的方法是否正确?
【问题讨论】:
标签: c# unit-testing events