单元测试继承了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);
}
}
我通常在这种情况下,实际上是在我的测试类中声明该类来限制范围。