Ich habe einen Code, der PropertyChanged
Ereignisse auslöst , und ich möchte einen Unit-Test durchführen können, um sicherzustellen, dass die Ereignisse korrekt ausgelöst werden.
Der Code, der die Ereignisse auslöst, ist wie folgt
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");
}
}
}
}
Ich erhalte einen schönen grünen Test aus dem folgenden Code in meinen Komponententests, der Delegaten verwendet:
[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);
}
Wenn ich dann jedoch versuche, die Einstellung der Eigenschaften wie folgt zu verketten:
public string MyProperty
{
set
{
if (_myProperty != value)
{
_myProperty = value;
NotifyPropertyChanged("MyProperty");
MyOtherProperty = "SomeValue";
}
}
}
public string MyOtherProperty
{
set
{
if (_myOtherProperty != value)
{
_myOtherProperty = value;
NotifyPropertyChanged("MyOtherProperty");
}
}
}
Mein Test für das Ereignis schlägt fehl - das Ereignis, das erfasst wird, ist das Ereignis für die MyOtherProperty.
Ich bin mir ziemlich sicher, dass das Ereignis ausgelöst wird, meine Benutzeroberfläche reagiert wie es ist, aber mein Delegat erfasst nur das letzte Ereignis, das ausgelöst wird.
Ich frage mich also:
1. Ist meine Methode zum Testen von Ereignissen korrekt?
2. Ist meine Methode zum Auslösen verketteter Ereignisse korrekt?