J'ai du code qui déclenche des PropertyChanged
événements et j'aimerais pouvoir tester unitaire que les événements sont déclenchés correctement.
Le code qui déclenche les événements est comme
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");
}
}
}
}
J'obtiens un joli test vert à partir du code suivant dans mes tests unitaires, qui utilise des délégués:
[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);
}
Cependant, si j'essaie ensuite de chaîner le réglage des propriétés comme ceci:
public string MyProperty
{
set
{
if (_myProperty != value)
{
_myProperty = value;
NotifyPropertyChanged("MyProperty");
MyOtherProperty = "SomeValue";
}
}
}
public string MyOtherProperty
{
set
{
if (_myOtherProperty != value)
{
_myOtherProperty = value;
NotifyPropertyChanged("MyOtherProperty");
}
}
}
Mon test pour l'événement échoue - l'événement qu'il capture est l'événement pour MyOtherProperty.
Je suis presque sûr que l'événement se déclenche, mon interface utilisateur réagit comme il le fait, mais mon délégué ne capture que le dernier événement à déclencher.
Je me demande donc:
1. Ma méthode de test des événements est-elle correcte?
2. Ma méthode de génération d' événements chaînés est-elle correcte?