2010-11-24 18 views
1

開発者がDependencyプロパティを使用していた既存のプロジェクトの一部を継承しましたが、WPF変更通知の場合はINotifyPropertyChangedとなりました。ユニットテストの依存関係プロパティ

私は、ソリューション全体にユニットテストをレトロフィットする必要がある位置にいます。

ViewModelの依存関係プロパティの一部は、バックグラウンドワーカープロセスから非同期に直接更新されるため、私はユニットテストを介してこれらのアップデートにフックする必要があります。 (コードを変更してコールバックを使用することはできません)。

これはどのように達成できますか?

多くの開発者は依存性プロパティをINotifyPropertyChangedよりも優先しているようですが、ユニットテストを書くことは(不可能ではないにしても)難しいようです。

何か不足していますか?

+0

テストしたいアスペクトを列挙できますか? –

答えて

3

あなたは、依存関係プロパティに変更されたハンドラをアタッチするDependencyPropertyDescriptorを使用することができます。

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

はしかし、あなたのビューモデルで依存関係プロパティを使用しないslew of reasonsがあります。コードを継承していることを考えれば、コードの動作をアサートしてからINotifyPropertyChangedに切り替えるための単体テストを作成することをお勧めします。

+0

+1あなたのViewModelsで依存関係プロパティを使用していない場合は、依存関係プロパティはビューに最も残されています。 – Doug

1

依存プロパティはxamlで制御できるため、それらを使用しているウィンドウを起動せずに、それらを包括的にユニットテストする良い方法はないかもしれません。あなたは本当にもう単体テストではありません。

つまり、DependencyObjectのGetValue()メソッドとSetValue()メソッドを呼び出すことによって、依存関係プロパティの後に行くことができます。

+0

ああ、私は、依存関係のプロパティがしばしば価値があるよりも難しいように思うことに同意します。私は個人的には、単体テストのために、アプリケーションのビューレイヤーを可能な限り薄く保つことを大切にしています。マイケルフェザーズは、彼のエッセイ "The Humble Dialog Box"でこのケースをよく扱っています。http://www.objectmentor.com/resources/articles/TheHumbleDialogBox.pdf –

+0

あなたは**あなたはそれらをテストすることができます! –