我目前正在開發一個類似MSPaint的WPF應用程序。但是我不會用鉛筆工具或類似的東西來繪畫,而是使用對象(矩形,圓形,三角形等)。我使用Prism和MVVM模型來實現可測試性和可維護性。依賴MouseEventArgs的單元測試函數?
我現在遇到了一個問題。我有一個CanvasView.xaml(正如名字所暗示的)我正在繪製的畫布。我已經實現了自定義Prism CommandBehaviors(即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是PaintObject對象的集合上查看一個ItemsControl的結合
- PaintObject是所有可用PaintObjects(矩形,圓形,三角形等)的基類
- SelectedObject(類型爲PaintObject)被確定爲b y在另一個Prism模塊(工具箱)中的選擇過程
問題是如何單元測試OnMouseLeftButtonDown方法?問題在於它很大程度上依賴於MouseEventArgs,並且我不知道如何模擬/存根MouseEventArgs。
你能提供一個例子嗎? – chrischu 2009-08-13 16:56:55