有趣的是,这篇关于分类BDD工具的博客谈到了TDD和ATDD。正如Liz Keogh所指出的那样:BDD是关于对话和探索的。所有参与者都能够贡献、沟通意图、分享想法、理解其他人等等,我们就能更快地得到一个合适的解决方案,并构建更好的软件。当我们最终遵循工具路径时,哪些工具最好支持软件项目利益相关者之间的协作呢?
基于这篇关于TDD、BDD和ATDD差异的博客,我认为至少有三种不同风格的BDD工具:
- 单元测试框架
JUnit改变了我们对开发和测试的看法。它的一个优点是测试可以用与应用程序本身相同的编程语言编写。因此,我们可以在交付团队已经拥有的知识基础上进行构建。当测试甚至被用来驱动开发时,我们就达到了TDD的天堂。
编程语言已经被优化以减少冗余,这是根据Ron Jeffries的说法开发人员最糟糕的罪恶之一。因此,在进行技术测试时,我们通常依赖于这些工具来正确构建产品,因为它们帮助我们最有效率。
一些人试图使自动化测试更易于理解,因为单元测试并不真正可读。其中一个最早的尝试是解析单元测试并提供简洁的摘要,也适合非开发人员阅读。例如TestDox / AgileDox从JUnit测试类的方法名称创建简单的文档,或者Pickels基于用Gherkin编写的功能文件生成文档。
像MSpec这样的框架有助于编写更易于阅读的测试,并提供易于阅读的输出。这种BDD工具的风格专注于人类可读的输出,这使得在开发人员完成工作后可以涉及非开发人员。
- 场景测试框架
为了更早地让利益相关者参与到开发周期中, 新的工具被创建出来,这些工具更加注重可读性。Cucumber 使用纯文本文件提供人类可以阅读的输入,以进行自动化测试。这些文本文件包含一种特别结构化语言编写的场景,该语言基于给定-当-那种结构。这些框架是支持共同定义验收标准的绝佳工具。
- 验收测试框架
在BDD思想的同时,另一种工具也得到了发展,其中FIT是早期的代表之一。这个集成测试框架允许在嵌入到与示例相关的文档中的表格中指定示例。编写这些文档不需要开发技能,它们可以轻松地被非技术人员阅读和审查,因为它们是纯文本文件。此外,文本可以被结构化,因为这些文档不是纯文本文件,而是富文本编辑器的输出。
FitNesse 允许基于 Wiki 协作指定预期行为。由于 Wiki 易于访问和使用,因此具有低门槛和学习曲线,这推动了整个团队的共同工作。许多敏捷支持者强调协作的最佳方式是面对面交流。但是,如果您写下您所思考和讨论的内容,它应该尽可能丰富和结构良好。
Concordion 提供了很大的灵活性,因为您可以使用段落、表格和适当的标点符号用普通语言描述您的要求。您描述的任何部分都可以用作自动化测试的输入,并用于测试系统输出的验证。由于它基于 HTML,您可以结构化您的文档并集成图像。简单地说,您拥有描述预期行为的 Web 表达能力。
BDD 应该帮助构建正确的产品
您可以使用所有三种工具的 BDD 实现,但每种工具都有其优点和缺点。单元测试框架和 xSpec 类似的工具完美地利用了编程的优势。由于它们是开发人员为开发人员提供的工具,因此如果您试图使技术部分正确,则是一个完美的选择。
当您想要传达应用程序的意图时,最好使用与编辑器工具密切相关的工具。如果规范仅包含输入和预期输出,则任何阅读它的人都必须从输入与预期输出的关系中重构您的想法。在标题中解释规范目标的简短描述有助于读者理解规范的结构。基于示例规范的文档可能如下所示:
![enter image description here](https://istack.dev59.com/eeC91.webp)
是的,SpecFlow很酷,NSpec也很酷...
FitNesse和Concordion也很酷