我使用SpecFlow和WatiN学习了基于Web的集成测试的基础知识。根据我的理解,SpecFlow根据页面上是否存在特定的HTML标记(按钮,链接等)来决定是否已通过测试。
但这不意味着我的集成测试与我的UI紧密耦合吗?例如,如果在功能ABC Watin中查找要存在的特定HTML元素(假设它是一个表),并且我突然更改了我的UI以使该表成为一堆div,WatiN将无法找到它我对功能ABC的测试将失败。我怎样才能避免这种情况呢?
我的建议是 -
a)我应该编写WatiN测试,以便他们受到UI设计变化的影响最小
b)我应该进行UI设计,以便WatiN在我更改时仍然能理解它
c)我应该使用一些能够识别UI设计变化的WatiN库
有什么建议?我哪里错了?
的修改
我是个白痴 - 我忘了提到我正在使用ASP.NET MVC
答案 0 :(得分:2)
首先,您应该决定是否真的需要通过UI。可能,特别是如果你想让一个利益相关者相信这些规范实际上是在运用这个系统。但是稍后你可能想要在域层或UI下面(例如MVC架构中的控制器)点击系统。
您甚至可能希望能够在两个版本之间切换
无论哪种方式,您都希望抽象出步骤定义与实际应用程序(无论是页面还是控制器)之间的紧密耦合。
实现此目的的一种方法是使用Page object pattern,它基本上是您正在测试的页面的包装类。此类为您提供了与页面交互的良好界面(例如,提交表单的方法,填写表单的属性以及查询页面内容的其他属性)。
您实际与页面进行交互或自动化的方式是“隐藏”在页面对象中的,只需更改此位置(如果?:)?)。
这当然不是很完美,你仍然对页面有一个“紧密”耦合,但现在在一个单独的类中抽象出来,至少要好一点。
提示是尽量让步骤定义简短。超短 - 单个声明或行。并将其余逻辑移至自动化层。
同样不要错过Matt Wynne的这个great presentation,这显示了这个效果很好。