У меня есть некоторый код, который вызывает PropertyChanged
событий, и я хотел бы иметь возможность провести модульный тест, чтобы события вызывались правильно.
Код, который вызывает события, похож на
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");
}
}
}
}
Я получил хороший зеленый тест из следующего кода в моих модульных тестах, в котором используются делегаты:
[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);
}
Однако, если я тогда попытаюсь объединить настройки свойств вместе, как показано ниже:
public string MyProperty
{
set
{
if (_myProperty != value)
{
_myProperty = value;
NotifyPropertyChanged("MyProperty");
MyOtherProperty = "SomeValue";
}
}
}
public string MyOtherProperty
{
set
{
if (_myOtherProperty != value)
{
_myOtherProperty = value;
NotifyPropertyChanged("MyOtherProperty");
}
}
}
Мой тест на событие не удался - событие, которое он захватывает, является событием для MyOtherProperty.
Я почти уверен, что событие происходит, мой пользовательский интерфейс реагирует так же, как и он, но мой делегат захватывает только последнее событие, которое сработало.
Вот мне и интересно:
1. Является ли мой метод проверки событий правильным?
2. Правильно ли мой метод поднятия прикованных событий?