Ho del codice che genera PropertyChangedeventi e vorrei essere in grado di testare l'unità che gli eventi vengono generati correttamente.
Il codice che sta generando gli eventi è simile
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");
}
}
}
}
Ottengo un bel test verde dal seguente codice nei test delle mie unità, che utilizza i delegati:
[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);
}
Tuttavia, se provo a mettere insieme le impostazioni delle proprietà in questo modo:
public string MyProperty
{
set
{
if (_myProperty != value)
{
_myProperty = value;
NotifyPropertyChanged("MyProperty");
MyOtherProperty = "SomeValue";
}
}
}
public string MyOtherProperty
{
set
{
if (_myOtherProperty != value)
{
_myOtherProperty = value;
NotifyPropertyChanged("MyOtherProperty");
}
}
}
Il mio test per l'evento ha esito negativo: l'evento che acquisisce è l'evento per MyOtherProperty.
Sono abbastanza sicuro che l'evento si attivi, la mia IU reagisce come fa, ma il mio delegato cattura solo l'ultimo evento da attivare.
Quindi mi chiedo:
1. Il mio metodo di test degli eventi è corretto?
2. Il mio metodo per generare eventi concatenati è corretto?