TDD和BDD差异

Jon*_*aca 49 testing tdd bdd

老实说,我没有看到BDD和TDD之间的区别.我的意思是,两者都只是测试预期会发生什么.我已经看到BDD测试如此充实,他们几乎算作TDD测试,我看到TDD测试非常模糊,他们黑盒子很多代码.我只想说我相信两者都更好.

这是一个有趣的问题.我从哪里开始?我是从高级BDD测试开始的吗?我是从低级TDD测试开始的吗?

Jör*_*tag 72

老实说,我没有看到BDD和TDD之间的区别.

那是因为没有.

我的意思是,两者都只是测试预期会发生什么.

那是错的.BDD和TDD绝对没有任何关于测试的东西.没有.纳达.小人物.压缩.尼克斯.没有丝毫.

不幸的是,TDD在几乎所有的东西中都有"测试"这个词(不仅在它的名字中,而且在测试框架,单元测试中,TestCase(你经常从中继承FooTest的类),(通常持有你的测试的类),testBar(为测试方法典型的命名模式),再加上大量的测试相关的术语,如"断言"和"验证"),这使得一些人认为,它实际上确实有一些做试验.因此,一些聪明的人说:"嘿,让我们改变名称",以消除任何混淆的可能性.

这就是BDD.它只是TDD,任何与测试相关的术语都被行为相关的术语术语所取代:

  • 测试→示例
  • 断言→期望
  • assertshould
  • 单位→行为
  • 验证→规格
  • … 等等

BDD只是带有不同单词的TDD.如果你做正确的TDD,你就是在做BDD.不同之处在于 - 如果您至少相信Sapir-Whorf假设的弱势形式 - 不同的词语可以更容易地做到正确.

  • BDD是TDD完成的.TDD做得正确是BDD. (14认同)
  • 否决答案,因为“那是因为没有”。是绝对错误的。有许多参考文献解释了这些差异,例如 https://cucumber.io/blog/bdd/bdd-vs-tdd/ (2认同)

k3b*_*k3b 32

BDD从客户的角度出发,侧重于整个系统的预期行为.

TDD从开发人员的角度出发,侧重于一个单元/类/功能的实现.它受益于更好的架构(可测试性设计,模块之间的耦合较少).

技术角度来看(如何编写"测试")它们是相似的.

我(从敏捷的角度来看)从一个bdd-userstory开始并使用TDD实现它.

  • 好吧... BDD实际上是从TDD级别开始的。在这里,您可以:http://blog.dannorth.net/introducing-bdd/-应该有所帮助。 (2认同)

Dan*_*ath 6

根据我在Wikipedia上收集的内容,BDD包含接受和质量检查测试,而没有利益相关者/用户的投入是无法完成的。BDD也使用自然语言来指定其测试,而TDD通常使用编程语言。两者之间可能有一些重叠,但我认为,主要区别不是模糊性,而是BDD的语言。

至于您从哪里开始,那真的取决于您的开发过程,不是吗?我假设如果您是自下而上地进行,那么您将首先编写TDD,一旦达到更高的水平,就将使用BDD测试这些功能是否按预期工作。

正如k3b指出的那样:主要区别在于BDD是面向问题域的,而TDD是面向解决方案域的。


qxl*_*lab 5

只是复制Matthew Flynn的答案,我比“TDD 和 BDD 与测试无关”更同意这个答案:

行为驱动开发是测试驱动开发的扩展/修订。其目的是帮助设计系统的人员(即开发人员)确定要编写的适当测试,即反映利益相关者所需行为的测试。最终的效果是一样的——开发测试,然后开发通过测试的代码/系统。BDD 的希望是测试实际上有助于表明系统满足要求。

更新

代码单元(单个方法)可能过于精细,无法表示行为测试所表示的行为,但您仍然应该使用单元测试来测试它们,以保证它们正常运行。如果这就是您所说的“TDD”测试的意思,那么是的,您仍然需要它们。