我正在使用MVP设计模式来构建我的应用程序的用户界面。 MVP以模型类和视图接口开始。每当我创建一个新模型时,我都会为它编写单元测试,使用Moq模拟视图接口实现。这很有效。
当我写实际视图时,我也会为它们编写单元测试。这些单元测试更难写。我开发了一种编写其中一些的技术。技术是:我复制模型测试,用实际实现替换模拟实现,并删除所有断言。
结果是一组易于创建但非常有限的测试。他们所做的就是确认在建立并完成模型时视图不会崩溃;它们不测试用户交互,也不测试视图的状态。不过,我发现使用这种技术编写的测试几乎暴露了我的所有UI编码错误。因此,我已经为我的团队制定了这种技术标准练习。
我的问题:
这种技术是否符合任何已知的编码习惯或陷阱?我正在努力做到这一点,但我更愿意遵循惯例标准。
是否有一种优雅的方法可以将模型单元测试重用为视图单元测试?目前,我在不同的测试中重复了很多代码,并且令人感到沮丧,但我还没有找到更好的方法。
-Cyro
PS:我已经专门询问了关于MVP的问题,但我怀疑只要一个类和一个接口之间存在密切关系,它就适用,并且都需要测试。答案 0 :(得分:0)
这个问题有点令人困惑,因为在MVP模式中,模型和视图并不总是彼此接口,但在这种情况下我会假设他们这样做并且存在某种数据绑定。此外,它听起来模型依赖于视图,而不是相反。
话虽如此,为了回答第一个问题,看来你正在编写View测试的方式实际上是在进行集成测试,即测试系统的多个部分协同工作的功能。正如您所发现的那样,在突出问题时这很有用。你错过的是两件事:
您应该考虑使用UI测试技术,可选择结合模拟模型和演示者。您还没有提到您正在生成的UI类型,但Web和Windows都有选项。对于后者(在某种程度上是前者),Coded UI Tests可能是有用的。对于网络,有Selenium,WatiN或Coded Web Test。
要回答第二个问题,我有类似的经验,因为我发现重复使用相同的测试代码来测试有和没有实体框架模拟的代码是有用的。为了实现这一点,几乎不需要重复代码。您可以使用一些标准技术:
我希望以上所有内容能够帮助您更有效地进行测试!祝你好运。