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