私はWPFアプリケーションで作業しており、ModelViewViewModelデザインパターンを使用しています。ビューから出てくる多くのイベントがあり、ViewModelアクティビティが発生します。WPF MVVMとユニットテスト
これらのイベントをUnitTestから呼び出すには、どのような方法がありますか?たとえば、ドロップイベントをシミュレートしたいとします。私は実際にイベントを発生させるために、スタブビューを作成したくはありません。
ありがとうございました。
私はWPFアプリケーションで作業しており、ModelViewViewModelデザインパターンを使用しています。ビューから出てくる多くのイベントがあり、ViewModelアクティビティが発生します。WPF MVVMとユニットテスト
これらのイベントをUnitTestから呼び出すには、どのような方法がありますか?たとえば、ドロップイベントをシミュレートしたいとします。私は実際にイベントを発生させるために、スタブビューを作成したくはありません。
ありがとうございました。
ViewModelクラスに直接ドロップイベントのイベントハンドラがあるようです。あなたのUIレイヤーにハンドラを持たせることは意味がありますか?それはあなたのViewModelで関数を呼び出すでしょうか?このようにして、単体テストは関数を呼び出すことができます(ViewModelに関する限り、ドラッグアンドドロップ操作をシミュレートします)。
さらに、ViewModelとUIコードを分離する方がよいでしょう。
MVVMパターンによると:ビューはViewModelに知っている
あなたがイベントを処理する必要がある場合は、それを行うには、私の知っている2つの方法があります。
1: はあなたのviewmodelでコマンドを公開し、それをトリガーするためにデータバインディングを使用しますが。これは私の好みの方法、例えば次のとおりです。
class MyViewModel
{
public ICommand ClickCommand { get; set; }
}
<Button Command="{Binding Path=ClickCommand}" />
あなたがこれを行うならば、あなたは、単に手動myViewModel.ClickCommand.Execute
を呼び出すことによってコマンドをテストすることができます。
2: は、のviewmodelに機能を公開し、書き込み最小限を.xaml.cs
ファイル内のイベントを処理すると、関数を呼び出す例:
class MyViewModel
{
public void HandleClick(){ }
}
<Button Click="MyClickHandler">
//.xaml.cs file
public void MyClickHandler(Object sender, EventArgs e) {
m_viewModel.HandleClick()
}
あなたがこれを行う場合は、手動でmyViewModel.HandleClick
を呼び出すだけでテストできます。 MyClickHandler
コードを単体テストでテストするのは面倒です。
イベントを発生させないでください。ハンドラを呼び出すだけです(つまり、イベントハンドラはパブリックにする必要があり、イベントハンドラの中心的な引数はほとんどありません)。これがCaliburn(http://www.codeplex.com/caliburn)で「アクション」を使ってどのように行われているか調べてください。
Moq
のようなモックフレームワークを使用しないのはなぜですか?彼らのクイックスタートを見て、それは模擬イベントのサンプルを持っています。 URLは:http://code.google.com/p/moq/wiki/QuickStart