2011-07-19 11 views
1

私は厳密なTDDを実践しようとしており、DelegateCommandsに関連する問題とCanExecuteが呼び出されたことをテストしています。 「リストからアイテムを選択すると、子アイテムを追加できるはずです」 「リストからアイテムを選択しないと、子アイテムを追加できないはずです」というメッセージが表示されます。 ユニットテストの方法CanExecuteChangedとRaisePropertyChanged

CanAddChildItemsがユニットテストで呼び出されないため、CanAddChildItemsが呼び出されることを確実にするために2番目のテストを書きました。 SelectedListItemのSetterにAddChildItems.RaiseCanExecuteChaned()を置いても、それはありません。

明らかに、アプリケーションはAddChildItems.RaiseCanExecuteChaned()がなければ必要に応じて動作しませんが、実際にテストするテストをしていなければ、それを置くことはできません。

私はこのシナリオを自信を持ってテストできますか?

+0

あなたのテストで何が行われているかを理解することができません。このためにUIテストを使用していますか?または、ビューモデルを直接演習していますか?テストごとにセットアップ、実行、アサーションを記述した擬似コードを書き、それを質問に追加する必要があります。または、ビューモデルの少なくとも一部のコードで、DelegateCommand、Execute、およびCanExecuteメソッドを表示します。 –

+0

@Merlyn - これはWPFのMVVMブレンドと少し相性があります - コマンドはアクションを表します。これは何か(Execute)を呼び出し、呼び出すことができる(CanExecute)ことを公開し、イベントをCanExecuteChanged(例えば、enabledプロパティを設定するために再クエリーする必要があることをButtonに伝えるため)を発生させます。 – Gishu

+0

私はDelegateCommandが何をしているのか知っています:)あなたの質問にいくつかのコードが含まれていることを意味し、どのコードを含めるべきかについて具体的にしようとしていました。実際の*コード*を持たないコードを参照するこの中間のテキストブロックは読みにくいです。 –

答えて

2

仮定:

あなたのViewModelにバインドするビューのプロパティおよびコマンドを公開します。あなたは、多くの場合、これをやって自分自身を見つける場合

EnablesAddChildItemsIfAnItemHasBeenSelected() 

    viewModel.AddChildItemsCommand.CanExecuteChanged += MarkNotificationReceived; // dummy handler in test fixture 

    viewModel.SelectedItem = someItemVM; 

    Assert.IsTrue(viewModel.AddChildItemsCommand.CanExecute(params)) 
    Assert.IsTrue(this.ReceivedCanExecuteChangedNotification) // flag in test fixture 

、独自のユーティリティクラスのPropertyChangeListener/CanExecuteChangeListenerを作成して、あなたのviewmodelとプロパティ/コマンド名を渡すことができます。

DisablesAddChildItemsIfThereIsNoSelection 
    viewModel.SelectedItem = someItemVM 
    var addChildItemsCmd = viewModel.AddChildItemsCommand; 
    var changeListener = new CanExecuteChangeListener(addChildItemsCmd); 

    viewModel.SelectedItem = null 

    Assert.IsFalse(addChilditemsCmd.CanExecute(params)) 
    Assert.IsTrue(changeListener.NotificationReceived) 
+0

ありがとうございました紀州は、まさに私が探していたものです。 – Damian

関連する問題