那为什么还要去找 Gherkin 呢?

我们在本章中使用的示例非常简单,但你可能会认为我们可以跳过用 Gherkin 语言编写的功能。我也是这么做的。我当时想:这没什么用。但是,当我开始参与更大的项目、与更大的团队、与不同的公司就同一个项目和目标开展合作时,我就在想: 我希望有一种我们可以共享的通用格式,这样我们就都能理解企业想要实现的目标。我当时正在与一家第三方公司合作,我想问问他们我是否可以借用或获得一份他们的测试用例,但问题是,他们直接将测试用例写入了他们的应用程序,而该应用程序不是用 PHP 编写的。我这才意识到,拥有某种通用语言是多么重要,我们可以用这种语言来理解系统的预期行为,而这种语言是与编程语言无关的!

下图展示了 Gherkin 语言作为一种与平台无关的中介语言,在表示软件解决方案的预期行为方面有多么有用:

image 2023 10 23 20 58 40 458
Figure 1. Figure 6.11 – Gherkin features and scenarios

通过使用一种通用语言来定义项目中的预期功能和方案,我们可以很容易地与完全不懂软件编程的不同团队进行协调。这对企业来说非常重要。不同团队的人员可以更容易、更快速地相互协作和理解,开发人员也可以通过这种方式更自信、更确定他们正在构建的东西是正确的。这听起来可能很荒谬,但我见过很多项目仅仅因为企业不同团队之间的沟通中断而出错。

总结

在本章中,我们定义并解释了什么是 BDD 以及为什么需要 BDD。通过实施 BDD,我们将能更好地开发解决方案,从而正确地实现实际业务目标。我们可以开始使用 Gherkin 语言(即普通英语)编写的功能和场景来定义这些业务目标。这样,公司不同团队的不同人员就能在定义系统预期行为时更好地相互协调和理解。这将有助于消除不同团队之间的隔阂和语言障碍。

我们创建了一个功能和一个场景,然后使用 BehatMinkGoutte 来定义预期的系统行为,打开无头浏览器,访问网络应用程序,并验证主页内容。

这只是 BDD 的冰山一角。在下一章中,我们将开始编写解决方案代码,同时通过同时使用 BDDTDD 来确保代码的可维护性和可测试性。