Saya memiliki beberapa kode yang memunculkan PropertyChanged
peristiwa dan saya ingin dapat menguji unit bahwa peristiwa tersebut dimunculkan dengan benar.
Kode yang meningkatkan acara adalah seperti
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");
}
}
}
}
Saya mendapatkan tes hijau yang bagus dari kode berikut dalam unit test saya, yang menggunakan delegasi:
[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);
}
Namun, jika saya kemudian mencoba dan rangkaian pengaturan properti bersama seperti:
public string MyProperty
{
set
{
if (_myProperty != value)
{
_myProperty = value;
NotifyPropertyChanged("MyProperty");
MyOtherProperty = "SomeValue";
}
}
}
public string MyOtherProperty
{
set
{
if (_myOtherProperty != value)
{
_myOtherProperty = value;
NotifyPropertyChanged("MyOtherProperty");
}
}
}
Tes saya untuk acara tersebut gagal - peristiwa yang ditangkapnya adalah acara untuk MyOtherProperty.
Saya cukup yakin acara ini menyala, UI saya bereaksi seperti itu, tetapi delegasi saya hanya menangkap acara terakhir yang akan dipecat.
Jadi saya bertanya-tanya:
1. Apakah metode pengujian peristiwa saya benar?
2. Apakah metode saya meningkatkan acara berantai benar?