私は現在、MSPaintのようなWPFアプリケーションである私のプロジェクトに取り組んでいます。ただし、鉛筆ツールなどではなく、オブジェクト(長方形、円、三角形など)を使用してペイントします。PrismとMVVMモデルを使用して、テスト容易性と保守性を実現しています。
私は今問題に遭遇しました。私はCanvasView.xamlを持っています。これは(名前が示すように)私がペイントしているキャンバスです。カスタムPrismCommandBehaviors(つまり、MouseDownCommandBehavior)を実装して、ViewModelのコマンドをキャンバス上のマウスアクションにバインドする方法を提供しました。
基本的な設定は次のようになります。
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は、ビューのItemsControlがバインドするPaintObjectオブジェクトのコレクションです。
- PaintObjectは、使用可能なすべてのPaintObject(Rectangle、Circle、Triangleなど)の基本クラスです。
- SelectedObject(タイプPaintObject)は、別のPrismモジュール(ツールボックス)の選択プロセスによって決定されます。
問題は、OnMouseLeftButtonDownメソッドをユニットテストするにはどうすればよいですか?問題は、MouseEventArgsに大きく依存しており、MouseEventArgsをモック/スタブする良い方法がわからないことです。