2010-11-24 148 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