ฉันมีรหัสบางอย่างที่ทำให้เกิด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. วิธีการของฉันในการเพิ่มเหตุการณ์ที่ถูกผูกมัด ?