2010-11-24 151 views
1

我已经继承了一些现有项目,其中开发人员使用Dependency属性而不是INotifyPropertyChanged来执行WPF更改通知。单元测试依赖项属性

我处于需要对整个解决方案进行单元测试翻新的职位。

ViewModel中的一些依赖项属性从一些后台工作进程异步直接更新,所以我需要通过我的单元测试挂钩这些更新。 (我无法更改代码并使用回调)。

这是如何实现的?

许多开发人员似乎赞成依赖属性超过INotifyPropertyChanged,但他们似乎很难(如果不是不可能)编写单元测试。

我错过了什么吗?

+0

你能列出你想测试的方面吗? – 2010-11-24 16:33:37

回答

3

您可以使用DependencyPropertyDescriptor到改变处理程序附加到一个依赖属性:

DependencyPropertyDescriptor.FromProperty(TextBox.TextProperty, typeof(TextBox)).AddValueChanged(textBox, OnTextChanged); 

然而,也有slew of reasons不要在您的视图模型使用依赖属性。鉴于你已经继承了代码,我会建议编写单元测试来声明代码的行为,然后切换到使用INotifyPropertyChanged

1

由于依赖属性可以在xaml中进行控制,因此可能没有一种很好的方法可以全面地对它们进行单元测试,而无需启动任何正在使用它们的窗口。在这一点上,你真的不再是单元测试了。

也就是说,你可以通过调用DependencyObject的GetValue()和SetValue()方法去依赖属性。

+0

哦,我同意依赖属性通常看起来比他们的价值更麻烦。我个人非常喜欢保持应用程序的视图层尽可能薄,尤其是为了单元测试。 Michael Feathers在他的文章“The Humble Dialog Box”中做了很好的描述:http://www.objectmentor.com/resources/articles/TheHumbleDialogBox.pdf – 2010-11-24 16:38:43

+0

你**可以在代码中“钩住”依赖项属性来调用你的代码,因此你可以测试它们! – 2010-11-24 17:43:36