私は現在MSPaintのようなWPFアプリケーションである私のプロジェクトに取り組んでいます。しかし、私は鉛筆ツールや類似のものではなく、オブジェクト(長方形、円、三角形など)でペイントしません。私はPrismとMVVMモデルを使用して、テスト容易性と保守性を実現しています。ユニットテスト機能はMouseEventArgsに依存していますか?
私は今問題に遭遇しました。私は、キャンバスを描くキャンバス(名前が示すように)であるCanvasView.xamlを持っています。私は、ViewModelのコマンドをキャンバス上のマウスアクションにバインドする方法を提供するために、カスタムPrism CommandBehaviors(つまり、MouseDownCommandBehavior)を実装しました。
基本的な設定は次のようになります。
public DelegateCommand<MouseEventArgs> MouseLeftButtonDownCommand { get; set; }
public CanvasViewModel(ICanvasView view, IEventAggregator eventAggregator) : base(view)
{
m_View = view;
m_EventAggregator = eventAggregator;
m_EventAggregator.GetEvent<ToolboxSelectionChangedEvent>().Subscribe(OnToolboxSelectionChanged);
MouseLeftButtonDownCommand = new DelegateCommand<MouseEventArgs>(OnMouseLeftButtonDown);
}
public void OnMouseLeftButtonDown(MouseEventArgs args)
{
Point position = m_View.GetPosition(args);
if(SelectedObject!=null){
PaintObject po = SelectedObject.Clone();
Canvas.SetLeft(po,position.X);
Canvas.SetTop(po,position.Y);
PaintObjects.Add(po);
}
}
コードに存在するいくつかのものではない:
- PaintObjects PaintObjectのコレクションは、ビュー上のItemsControlには
- に結合することをオブジェクトされますPaintObjectは、使用可能なすべてのPaintObjects(Rectangle、Circle、Triangleなど)の基本クラスです。
- SelectedObject(タイプPaintObject)が決定されます。b他のPrismモジュール(Toolbox)での選択プロセス
問題はどうやってOnMouseLeftButtonDownメソッドを単体テストできますか?問題は、MouseEventArgsに大きく依存しているため、MouseEventArgsをモック/スタブするための良い方法はわかりません。
例を挙げてください。 – chrischu