Я пишу (пытаюсь написать) модульные тесты для приложения WPF.Как выполнить единичные ошибки тестирования в бизнес-объекте IDataErrorInfo?
Бизнес-объекты, которые пользовательский интерфейс связывает для реализации IDataErrorInfo, так что когда я устанавливаю ValidatesOnDataErrors = True в моем представлении xaml, индексатор ошибок (this []) вызывается в любое время, когда вызывается сеттер для связанного бизнес-объекта. Эта часть замечательная.
Теперь, если я вызываю установщик того же самого свойства из unitTest, он никогда не вызывает индексатор ошибок. Как заставить идентификатор IDataErrorInfo оцениваться в рамках единичного теста?
только для иллюстрации, вот один из моих простых индексировщиков ошибок, который содержит свойство Name. Установка 'myObject.Name = string.Empty;' вызывает вызов setter, но не индексатор ошибок, когда я это делаю в своих модульных тестах.
public string Name
{
get { return _name; }
set
{
_name = value;
IsDirty = true;
OnPropertyChanged("Name");
}
}
#region IDataErrorInfo
public Dictionary<string, string> ErrorCollection;
public string this[string property]
{
get
{
string msg = null;
switch (property)
{
case "Name":
if (string.IsNullOrEmpty(Name))
msg = "ICU Name is required.";
else if (Name.Length < 4)
msg = "ICU Name must contain at least 4 characters.";
else if (_parent.Units.AsEnumerable().Count(u => u.Name == Name) > 1)
msg = Name + " already exists, please change to a different Name.";
break;
}
if (msg != null && !ErrorCollection.ContainsKey(property))
ErrorCollection.Add(property, msg);
if (msg == null && ErrorCollection.ContainsKey(property))
ErrorCollection.Remove(property);
return msg;
}
}
public string Error
{
get { return null; }
}
#endregion
Спасибо!
Да, как ваш, так и подход Джоэла Б Фанта работают отлично. Менее насмешливо, просто называя индексатор, а не подключая событие PropertyChanged. Спасибо всем. – Bob