有趣的是,这篇关于分类 BDD 工具的博客讨论了 TDD 和 ATDD。正如 Liz Keogh 指出的那样:BDD is about conversation and exploration。所有相关人员越容易做出贡献、交流意图、分享想法、理解他人等。我们越快获得适当的解决方案,我们构建的软件就越好。当我们最终遵循工具路径时,最能支持软件项目利益相关者之间协作的工具是什么?
基于this blog on the differences between TDD, BDD, and ATDD,我想说至少有三种不同风格的BDD工具:
- 单元测试框架
JUnit 改变了我们对开发和测试的看法。它的优势之一是可以使用与应用程序本身相同的编程语言编写测试。因此,我们可以在交付团队已有的知识基础上再接再厉。当测试甚至用于驱动开发时,我们就达到了 TDD 的天堂。
编程语言已经过优化以减少冗余,根据 Ron Jeffries 的说法,这是开发人员最严重的罪过之一。因此,当我们进行技术测试以正确构建产品时,我们经常依赖这些工具,因为它们可以帮助我们提高效率。
有几个人试图让自动化测试更容易理解,比如unit tests aren't really readable。最初的尝试之一是解析单元测试并提供简明摘要,非开发人员也可以阅读。例如,TestDox / AgileDox 根据 JUnit 测试类的方法名称创建简单文档,或者Pickels 根据 Gherkin 编写的功能文件生成文档。
诸如MSpec 之类的框架有助于编写更易读的测试,并额外提供可读的输出。这些 BDD 工具的风格侧重于人类可读的输出,这使得非开发人员能够在开发人员完成工作后参与其中。
- 场景测试框架
致involve stakeholders earlier in the development cycle,创建了更多关注可读输入的新工具。 Cucumber 利用纯文本文件为自动化测试提供人类可读的输入。文本文件包含基于 given-when-then 结构的特殊结构化语言编写的场景。这些框架是支持协作定义验收标准的出色工具。
- 验收测试框架
在 BDD 理念的同时,还开发了另一种工具,其中 FIT 是早期的代表。这个Framework for Integrated Test 允许在嵌入到与示例相关的文档中的表中指定示例。编写这些文档不需要任何开发技能,而且它们可以很容易地被非技术人员阅读和审查,因为它们是纯文本的。此外,文本可以结构化,因为文档不是纯文本文件,而是富编辑器的输出。
FitNesse 允许基于 wiki 协作指定预期行为。由于 wiki 易于访问和使用,它具有较低的入门和学习曲线,这推动了整个团队的共同工作。许多敏捷支持者强调,最好的协作方式是面对面的交流。但是,如果你把你的想法和讨论写下来,它应该尽可能丰富且结构合理。
Concordion 提供了很大的灵活性,因为您可以使用段落、表格和适当的标点符号以普通语言描述您的要求。您描述的任何部分都可以用作您的自动化测试的输入,并用于验证您被测系统的输出。由于它基于 HTML,您可以构建文档并集成图像。简而言之,您拥有描述预期行为的网络表达能力。
BDD 应该有助于构建正确的产品
您可以使用所有三种工具来实施 BDD,但每种工具都有其优点和缺点。单元测试框架和类似 xSpec 的工具完美地利用了编程的优势。由于它们是为开发人员提供的工具,因此如果您尝试正确处理技术部分,它们是一个完美的选择。
当您想传达应用程序的意图时,最好使用与编辑人员在工作中使用的工具密切相关的工具。如果一个规范只包含输入和预期输出,任何阅读它的人都必须从输入与预期输出的关系中重构你的想法。标题中解释规范目标的简短描述有助于读者理解规范的结构。基于示例规范的文档可能如下所示:
是的,SpecFlow 很酷,NSpec 很酷...
FitNesse 和 Concordion 也很酷