sách gpt4 ai đã đi

wpf - 依赖于 MouseEventArgs 的单元测试功能?

In lại 作者:行者123 更新时间:2023-12-04 14:07:37 30 4
mua khóa gpt4 Nike

我目前正在开发我的一个项目,它是一个类似于 MSPaint 的 WPF 应用程序。但是,我不使用铅笔工具或类似的工具,而是使用对象(矩形、圆形、三角形等)进行绘画。我使用 Prism 和 MVVM 模型来实现可测试性和可维护性。

我现在遇到了一个问题。我有一个 CanvasView.xaml (顾名思义)我正在画的 Canvas 。我已经实现了自定义 Prism CommandBehaviors(即 MouseDownCommandBehavior),以提供一种将 ViewModel 的命令绑定(bind)到 Canvas 上的鼠标操作的方法。

基本设置如下所示:

public DelegateCommand MouseLeftButtonDownCommand { get; set; }

public CanvasViewModel(ICanvasView view, IEventAggregator eventAggregator) : base(view)
{
m_View = view;
m_EventAggregator = eventAggregator;
m_EventAggregator.GetEvent().Subscribe(OnToolboxSelectionChanged);


MouseLeftButtonDownCommand = new DelegateCommand(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 是 View 上的 ItemsControl 绑定(bind)到
  • 的 PaintObject 对象的集合。
  • PaintObject 是所有可用 PaintObject(矩形、圆形、三角形等)的基类
  • SelectedObject(PaintObject 类型)由另一个 Prism 模块(工具箱)中的选择过程确定

  • 问题是如何对 OnMouseLeftButtonDown 方法进行单元测试?问题是它严重依赖于 MouseEventArgs,我真的不知道模拟/ stub MouseEventArgs 的好方法。

    1 Câu trả lời

    我已经能够使用 WPF 事件路由系统通过附加属性执行这种类型的单元测试,并且我假设它与 UIElement 的任何其他后代(Windows 等)相同,因为 .RaiseEvent此代码片段中的 () 方法由 UIElement 类提供:

     [TestMethod]
    public void ThingsShouldHappenWhenMouseIsClicked()
    {
    // ARRANGE
    var itemsControl = new ItemsControl ();
    var myDependencyMock = new Mock();
    // provide dependency to a dependency property
    MyAttachedProperty.SetDragDropHandler(itemsControl, myDependencyMock.Object);

    var leftClickEventArgs = new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left)
    {
    RoutedEvent = UIElement.PreviewMouseLeftButtonDownEvent,
    Source = _itemsControl
    };

    // ACT
    itemsControl.RaiseEvent(leftClickEventArgs);

    // ASSERT
    myDependencyMock.Verify(x => x.TheThingHappened());
    }

    我无法 100% 确定这是否适用于您在问题中列出的特定控件类型,但希望此代码段对某人有所帮助。

    关于wpf - 依赖于 MouseEventArgs 的单元测试功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1272755/

    30 4 0
    Bài viết được đề xuất: nlp - 处理英文报表
    Bài viết được đề xuất: .net - .net 的首选单元测试隔离框架
    Bài viết được đề xuất: sql-server-2005 - 从左外连接中选择最上面的一个
    Bài viết được đề xuất: iis - 无法远程调试 IIS -- w3wp.exe 变灰
    行者123
    Hồ sơ cá nhân

    Tôi là một lập trình viên xuất sắc, rất giỏi!

    Nhận phiếu giảm giá Didi Taxi miễn phí
    Mã giảm giá Didi Taxi
    Giấy chứng nhận ICP Bắc Kinh số 000000
    Hợp tác quảng cáo: 1813099741@qq.com 6ren.com