我继承了一些现有项目,其中开发人员使用Dependency
属性,而不是INotifyPropertyChanged
用于WPF更改通知。
我处在一个需要将单元测试改编为整个解决方案的位置。
ViewModel
中的某些依赖项属性直接从某个后台工作进程异步更新,因此我需要通过单元测试挂钩这些更新。 (我无法更改代码并使用回调)。
如何实现这一目标?
许多开发人员似乎更喜欢INotifyPropertyChanged
之外的依赖属性,但是编写单元测试似乎非常困难(如果不是不可能)。
我错过了什么吗?
答案 0 :(得分:3)
您可以使用DependencyPropertyDescriptor
将已更改的处理程序附加到依赖项属性:
DependencyPropertyDescriptor.FromProperty(TextBox.TextProperty, typeof(TextBox)).AddValueChanged(textBox, OnTextChanged);
但是,视图模型中有slew of reasons不使用依赖项属性。鉴于您已经继承了代码,我建议编写单元测试来断言代码的行为,然后切换到使用INotifyPropertyChanged
。
答案 1 :(得分:1)
由于依赖属性可以在xaml中控制,因此可能没有一种好方法可以在不启动任何使用它们的窗口的情况下对它们进行全面的单元测试。此时你真的不再进行单元测试了。
也就是说,你可以通过调用DependencyObject的GetValue()和SetValue()方法来追踪依赖属性。