我很喜欢 BDD 的开发方法,但我遇到了一个问题,就是要走多远。来自 ThoughtWorks 最近的Radar的评论让我停顿了一下:
“像 Cucumber 这样的行为驱动设计 (BDD) 测试框架的出现,与像 Selenium 这样的浏览器自动化工具相结合,鼓励了在浏览器级别广泛使用验收测试。不幸的是,这鼓励了在运行成本较高的情况下进行大量测试。测试是最大的。相反,我们应该在适当的级别进行测试,尽可能接近代码,这样才能以最高的效率运行测试。浏览器级别的测试应该是锦上添花,有验收和单元支持在适当的层执行测试。”
所以这是我的场景(双关语):
我有一个基本的 CRUD 应用程序,其业务要求是根据允许最终用户选择的标准过滤显示的数据。为了便于讨论,假设它是电力公司的应用程序,我正在显示每个客户当前的当月至今的用电量。此应用程序的用户可以通过选择单个客户、多个客户、无客户或“所有客户”来缩小数据范围。显示的数据将根据他们选择的内容而变化。
对于产品利益相关者来说,这些实际上代表了 4 个不同的场景。但是从开发人员的角度来看,它们实际上是相同的,唯一的区别是传递给数据库的参数。所以问题就变成了:说明每个排列的好处是否超过了运行和维护它们的成本?
我认为 BDD 原则可能会说“是”,因为预期行为的沟通更加明确,但我不确定。这对我来说肯定有矫枉过正的感觉。这些场景可能是大量的复制粘贴,并进行了微小的更改。
我的倾向是用一个捕获核心业务价值的场景来覆盖这个功能(“当我选择一个客户时,我会看到用电量数据”),然后用一组非基于 UI 的集成测试来覆盖其他排列验证服务/查询返回正确的数据。这种想法是错误的吗?在不放弃 BDD 优势的情况下,确保涵盖这些场景的最佳答案是什么?