gpt4 book ai didi

wpf - 如何对 IDataErrorInfo 业务对象中的错误进行单元测试?

转载 作者:行者123 更新时间:2023-12-04 21:47:35 24 4
gpt4 key购买 nike

我正在为 WPF 应用程序编写(尝试编写)单元测试。

UI 绑定(bind)以实现 IDataErrorInfo 的业务对象,这样当我在 View xaml 中设置 ValidatesOnDataErrors=True 时,只要调用绑定(bind)业务对象的 setter ,就会调用错误索引器 (this[])。
那部分很棒。

现在,如果我从 unitTest 调用相同属性的 setter ,它永远不会调用错误索引器。如何强制从单元测试中评估 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自己事件,然后在调用处理程序时,使用属性名称调用索引器。或者不要 Hook 事件并使用您正在测试的属性的名称调用索引器。

这就是.NET 所做的。它使用属性名称调用索引器。

MyClass mc = new MyClass();
mc.Name = "abc";
string error = mc["Name"];

关于wpf - 如何对 IDataErrorInfo 业务对象中的错误进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2342361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com