我怎么能写一个使用的WinForms对视图控制器类单元测试?(How can I write a u

2019-09-23 20:07发布

有没有人能够成功的单元测试方法所根据需要,联接到System.Windows.Forms.Form类?

我最近一直工作在C#WinForms应用程序,试图用一个MVC结构来构建它。 这是相当困难的,因为该框架是不是真的有这个内置的初衷。

但是,当你把单元测试混进去它变得更加强硬。 我一直在确保我的控制器没有连接到具体的视图类,这样我就可以使用存根/模拟进行单元测试。 但地方引用Form类是不可避免的,也需要进行测试这些方法。

我一直在使用起订量 ,因为它有一些很好的类型安全功能,并允许嘲弄具体类型。 但不幸的是,它并没有让我“期望”对一个具体类型既不是虚拟的还是抽象的方法或属性的调用。 而且,由于Form类是没有考虑建立子类,这是一个很大的问题。 我需要能够嘲笑Form类,以防止真正的窗户被创建,以“期待” ShowDialog的,例如。

所以我留下无法运行任何单元测试,做表格的子类,其中我的意见是过多交流。

有没有人在那里谁已经成功地进行单元测试这种类型的代码? 你是怎么做到的?

这是一些其他嘲讽框架才能解决? 将由其他嘲讽框架中使用基于字符串的方法受到同样的限制? 我可以写我自己的明确的长手mock类,或将缺乏虚拟成员阻止我能够抑制窗口的行为方式太是什么?

或者是有一些方法我都没有想到的,这样的形式,再加码的方法和琐碎复杂类最终构建我的班,这样我可以脱身没有明确的单元测试他们,没有我的良心打我为了它?

Answer 1:

用于与GUI元素的单元测试我听到的最好的方法/是刍对话模式/方法。 从本质上说,窗体只是接口,和所有的实际工作中其他类完成。 您单元测试提供的功能的类,然后就配合你的GUI事件,在这些类中相应的方法。



Answer 2:

我现在的想法是,我可能必须使用组合而不是继承使用Form类,从中分离的控制器。

这样做的缺点是,每次我需要使用,我没有为计划的Form类的成员,我需要明确地将它添加到我的视图界面。



文章来源: How can I write a unit test for a controller class that uses winforms for views?