有没有人能够成功地对必须耦合到 System.Windows.Forms.Form 类的方法进行单元测试?
我最近一直在开发 C# winforms 应用程序,尝试使用 MVC 结构构建它。这已经够难了,因为框架并没有真正考虑到这一点。
但是,当您将单元测试加入其中时,它会变得更加困难。我一直在确保我的控制器没有耦合到具体的视图类,以便我可以使用存根/模拟进行单元测试。但是在某处引用 Form 类是不可避免的,这些方法确实需要测试。
我一直在使用Moq,因为它有一些很好的类型安全特性,并且允许模拟具体类型。但不幸的是,它不允许我“期望”调用既不是虚拟也不是抽象的具体类型的方法或属性。而且由于 Form 类在构建时没有考虑到子类化,所以这是一个大问题。例如,我需要能够模拟 Form 类以防止创建真正的窗口,例如通过“预期”ShowDialog。
因此,我无法运行任何与 Form 的子类进行大量交互的单元测试,我的观点是。
有没有人成功地对这种类型的代码进行了单元测试?你是怎么做到的?
这是其他模拟框架可以解决的问题吗?其他模拟框架使用的基于字符串的方法是否会受到相同的约束?我可以编写自己的显式长手模拟类,还是缺少虚拟成员会阻止我也能够以这种方式抑制窗口行为?
或者是否有某种我没有想到的方法来构建我的类,以便表单耦合代码最终以简单复杂的方法和类结束,这样我就可以在不明确对它们进行单元测试的情况下逃脱,而不会被我的良心打败为了它?