Jör*_*tag 72
老实说,我没有看到BDD和TDD之间的区别.
那是因为没有.
我的意思是,两者都只是测试预期会发生什么.
那是错的.BDD和TDD绝对没有任何关于测试的东西.没有.纳达.小人物.压缩.尼克斯.没有丝毫.
不幸的是,TDD在几乎所有的东西中都有"测试"这个词(不仅在它的名字中,而且在测试框架,单元测试中,TestCase(你经常从中继承FooTest的类),(通常持有你的测试的类),testBar(为测试方法典型的命名模式),再加上大量的测试相关的术语,如"断言"和"验证"),这使得一些人认为,它实际上确实有一些做试验.因此,一些聪明的人说:"嘿,让我们改变名称",以消除任何混淆的可能性.
这就是BDD.它只是TDD,任何与测试相关的术语都被行为相关的术语术语所取代:
assert → shouldBDD只是带有不同单词的TDD.如果你做正确的TDD,你就是在做BDD.不同之处在于 - 如果您至少相信Sapir-Whorf假设的弱势形式 - 不同的词语可以更容易地做到正确.
k3b*_*k3b 32
BDD从客户的角度出发,侧重于整个系统的预期行为.
TDD从开发人员的角度出发,侧重于一个单元/类/功能的实现.它受益于更好的架构(可测试性设计,模块之间的耦合较少).
从技术角度来看(如何编写"测试")它们是相似的.
我(从敏捷的角度来看)从一个bdd-userstory开始并使用TDD实现它.
根据我在Wikipedia上收集的内容,BDD包含接受和质量检查测试,而没有利益相关者/用户的投入是无法完成的。BDD也使用自然语言来指定其测试,而TDD通常使用编程语言。两者之间可能有一些重叠,但我认为,主要区别不是模糊性,而是BDD的语言。
至于您从哪里开始,那真的取决于您的开发过程,不是吗?我假设如果您是自下而上地进行,那么您将首先编写TDD,一旦达到更高的水平,就将使用BDD测试这些功能是否按预期工作。
正如k3b指出的那样:主要区别在于BDD是面向问题域的,而TDD是面向解决方案域的。
只是复制Matthew Flynn的答案,我比“TDD 和 BDD 与测试无关”更同意这个答案:
行为驱动开发是测试驱动开发的扩展/修订。其目的是帮助设计系统的人员(即开发人员)确定要编写的适当测试,即反映利益相关者所需行为的测试。最终的效果是一样的——开发测试,然后开发通过测试的代码/系统。BDD 的希望是测试实际上有助于表明系统满足要求。
更新
代码单元(单个方法)可能过于精细,无法表示行为测试所表示的行为,但您仍然应该使用单元测试来测试它们,以保证它们正常运行。如果这就是您所说的“TDD”测试的意思,那么是的,您仍然需要它们。