1

私はMVVMでアプリケーションを書いていますが、これまでのところ良い結果が得られています。しかし、私はViewModelでエラーを発生させる作業を行っています。これをユーザーに表示して知らせたいと思っています。

ViewModel (VM) で次のようなことができます。

MessageBox.Show(errorMessage);

またはおそらく次のようなもの:

new ErrorMessageWindow(errorMessage).ShowDialog()

スタイリングできるので。

問題は、VM から UI ポップアップを作成していることです。ウィンドウをポップアップし、手動で閉じるまで実行を停止するアプリケーションの単体テストを作成しています。

良いアプローチを探しています。

VM でイベントを発生させることを検討していましたが、ビューは実際には VM やそのプロパティを認識していないため、サブスクライブする方法がわかりません。

私は外部フレームワークを使用していません。自分で何かを実装したいのです。

4

3 に答える 3

4

私は通常、エラーを発生させる必要があることを通知する方法をビューモデルに提供しました。これは、依存関係の挿入、コンストラクターへの渡しなどによって行うことができます。実装は、それを含むアプリケーションまたはバインドされたビューによって提供されます。

テストするときは、「エラー メッセージの表示」機能のテスト実装を渡します。この機能は、それが呼び出されたかどうか、および正しいエラー メッセージを要求したかどうかを確認するだけです。理想的には、viewmodel をリソース名と引数の配列をフォーマット文字列に渡すように制限して、国際化でも機能するようにします。

于 2013-03-27T16:00:02.457 に答える
3

単体テスト中に実装を交換できるように、抽象化に対して作業する必要があります。

たとえばIWindowManager、メソッドとのインターフェースを作成しShowDialog、次に呼び出す 1 つの実装MessageBox(または生産中に必要な手法) を作成してから、分離フレームワークを使用するか、必要な結果を返す単体テスト用のテスト実装を作成できます。テストの制御変数。

MVVM フレームワークの使用を検討する必要があり、 Caliburn.Microのようなものには既にIWindowManagerインターフェイスがあります。

于 2013-03-27T16:01:08.647 に答える
2

従来の から離れることをお勧めしますWin32 dialogs。どちらかといえば、ダイアログを WPF で実行し、ViewModelたとえば表示のために bool にバインドされたダイアログを使用してそれを発生させる方がよいでしょう。Window Manager のモック クラスを作成する必要さえないため、これは簡単にテストできます。

WPF で独自のポップアップ ダイアログを作成する方法の簡単な例は、こちらで入手できます。

また、ViewModel からダイアログ ボックスの作成を移動するのに役立つ、ダイアログ サービスを使用した代替実装もここで見つけることができます。これにより、単体テスト中にダイアログ サービスをモックできます。

于 2013-03-27T16:00:35.250 に答える