单元测试继承了WinForms控件

问题描述:

最近我一直在使用Model-View-Presenter,当我觉得我理解如何做事情时,最终遇到了一些我不太明白的新东西。单元测试继承了WinForms控件

在我目前的情况下,我使用的是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,我没有单元测试的Presenter或View来模拟。我无法提高OnMouseWheel事件以测试ZoomPercent被更改。

继承PictureEdit正确的方式去做这件事,如上所示?我如何单元测试我对课程所做的修改?

您可以随时使用测试类,从你自己的类,在这里公开公共的方法来调用转发到受保护的一个继承,并利用它来进行测试:

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

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