Tengo un código que genera PropertyChanged
eventos y me gustaría poder hacer una prueba unitaria de que los eventos se están generando correctamente.
El código que está generando los eventos es como
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");
}
}
}
}
Recibo una buena prueba verde del siguiente código en mis pruebas unitarias, que usa delegados:
[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);
}
Sin embargo, si luego trato de encadenar la configuración de propiedades de la siguiente manera:
public string MyProperty
{
set
{
if (_myProperty != value)
{
_myProperty = value;
NotifyPropertyChanged("MyProperty");
MyOtherProperty = "SomeValue";
}
}
}
public string MyOtherProperty
{
set
{
if (_myOtherProperty != value)
{
_myOtherProperty = value;
NotifyPropertyChanged("MyOtherProperty");
}
}
}
Mi prueba para el evento falla: el evento que captura es el evento para MyOtherProperty.
Estoy bastante seguro de que el evento se dispara, mi interfaz de usuario reacciona como lo hace, pero mi delegado solo captura el último evento para disparar.
Entonces me pregunto:
1. ¿Es correcto mi método de prueba de eventos?
2. ¿Es correcto mi método de generar eventos encadenados ?