【问题标题】:Unit testing inherited WinForms controls单元测试继承的 WinForms 控件
【发布时间】:2013-10-24 18:48:35
【问题描述】:

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

在我目前的情况下,我使用的是 PictureEdit(它基本上是作为 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 是否正确?以及如何对我对该类所做的修改进行单元测试?

【问题讨论】:

    标签: c# winforms inheritance moq mvp


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-09
      • 2019-11-01
      • 2015-02-02
      相关资源
      最近更新 更多