单元测试继承了 WinForms 控件

本文关键字:控件 WinForms 继承 单元测试 | 更新日期: 2023-09-27 18:36:43

我最近一直在使用Model-View-Presenter,当我觉得我知道如何做事时,我最终会遇到一些我不太理解的新东西。

在我目前的情况下,我使用的是PictureEdit(它基本上是一个美化的PictureBox作为DevExpress的WinForms控件的一部分),虽然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,我没有要进行单元测试的演示器或要模拟的视图。我无法引发OnMouseWheel事件来测试ZoomPercent是否被更改。

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

单元测试继承了 WinForms 控件

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

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

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