繁体   English   中英

单元测试继承了WinForms控件

[英]Unit testing inherited WinForms controls

我最近一直在使用Model-View-Presenter,当我感觉自己懂得如何做时,最终遇到了我不太了解的新事物。

在我当前的情况下,我使用的是PictureEditPictureEdit上是DevExpress WinForms控件的一部分,它是一个美化了的PictureBox ),尽管PictureEdit可以缩放和滚动,但这并不完全是我想要的。

当您使用鼠标滚轮滚动时,它将导致图片上下移动。 我希望它改为放大和缩小特定数量。 所以我尝试了以下方法:

public class AlteredPictureEdit : PictureEdit
{
  protected override void OnMouseWheel(MouseEventArgs e)
  {
    if (e.Delta > 0)
      this.Properties.ZoomPercent += 10;
    else
      this.Properties.ZoomPercent -= 10;
  }
}

因此,这将PictureEdit的行为更改为在鼠标滚动而不是平移时缩放。 但是因为我有进行单元测试的想法,所以我想这样做,但是我不知道怎么做。

从行为上讲,我将设计自己的演示者(测试中的单元),并将其作为依赖项注入视图作为模拟。 然后,我可以使用该模拟引发一个MouseWheel事件,然后断言ZoomPercent值是增大还是减小。

通过继承PictureEdit ,我没有Presenter来进行单元测试或View来进行模拟。 我无法引发OnMouseWheel事件来测试ZoomPercent被更改。

如上所示,继承PictureEdit是执行此PictureEdit的正确方法吗? 以及如何对对课程所做的修改进行单元测试?

您始终可以使用从您自己的类继承的测试类,在该类中公开一个公共方法以将调用转发给受保护的方法,并将其用于测试:

public class AlteredPictureEditTester : AlteredPictureEdit
{
    public void RaiseMouseWheelEvent(MouseEventArgs e)
    {
         OnMouseWheel(e);
    }
}

在这种情况下,我通常要做的实际上是在测试类中声明该类以限制范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM