我知道BDD,也读过Gojko Adzic的《Specification by Example》这本好书;据我所知,他们几乎是一样的,有很多共同点;但我无法理解他们的主要区别。我的意思是我们可以互换使用它们吗?
总体思路
BDD是以"这个功能做这个和那个"的形式描述测试的格式。如果需求是以相同的格式编写的,那么我们最终会让整个团队使用BDD。因为这些需求可以用于测试。
Specs的示例是…好吧,我举一个具体的例子来说明需求。
测试格式用于测试的bdd可以有不同的形式:
- Given When Then
- li>小黄瓜(一种更严格的G/W/T方言,由黄瓜框架家族使用)
- 描述它(茉莉,摩卡等)
- 或者自定义的东西。可能是相同的旧JUnit与测试命名为"adminHasAccessToProfileOfOthers"而不是旧的样式"testAdminCanAccessProfileOfOthers">
需求对于需求的bdd,这里有一个例子:
如果用户有足够的钱,他们可以购买该产品
这里是spec -by-example:
如果用户有10美元,产品是9美元,用户可以购买该产品
看,在第一个例子中,我们使用抽象的概念,而在后一个例子中,我们使用特定的值。
通常当人们谈论BDD/spec -by-example时,他们会使用Given-When-Then来编写需求。但是作为一个抽象的概念,这并不是强制性的——它只是大多数测试框架所支持的。
总的来说,BDD对于测试来说是一个非常好的想法,特别是当它不是给定-何时-然后:)但是当涉及到需求时-在我的经验中,我还没有看到任何项目真正从中受益。
至于其他常见的误解:BDD以及它如何与TDD无关。