В настоящее время я работаю над моим проектом, который представляет собой приложение WPF, подобное MSPaint. Однако я рисую не карандашом или чем-то подобным, а объектами (прямоугольник, круг, треугольник и т. д.). Я использую Prism и модель MVVM для обеспечения тестируемости и удобства обслуживания.
Я сейчас столкнулся с проблемой. У меня есть 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) определяется процессом выбора в другом модуле Prism (Toolbox).
Вопрос в том, как я могу протестировать метод OnMouseLeftButtonDown? Проблема в том, что он в значительной степени зависит от MouseEventArgs, и я действительно не знаю хорошего способа смоделировать/заглушить MouseEventArgs.