Eu tenho algum código que gera PropertyChanged
eventos e gostaria de poder testar a unidade de que os eventos estão sendo gerados corretamente.
O código que está gerando os eventos é 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");
}
}
}
}
Eu recebo um bom teste verde do código a seguir em meus testes de unidade, 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);
}
No entanto, se eu tentar encadear a configuração de propriedades da seguinte maneira:
public string MyProperty
{
set
{
if (_myProperty != value)
{
_myProperty = value;
NotifyPropertyChanged("MyProperty");
MyOtherProperty = "SomeValue";
}
}
}
public string MyOtherProperty
{
set
{
if (_myOtherProperty != value)
{
_myOtherProperty = value;
NotifyPropertyChanged("MyOtherProperty");
}
}
}
Meu teste para o evento falha - o evento que ele captura é o evento para MyOtherProperty.
Tenho certeza de que o evento é acionado, minha interface do usuário reage da mesma forma, mas meu delegado captura apenas o último evento.
Então, eu estou pensando:
1. Meu método de testar eventos está correto?
2. Meu método de gerar eventos encadeados está correto?