BDD如何补充TDD

自从我听说BDD(行为驱动开发)以来,我一直在想它是否补充了TDD? 它在Web开发中有用吗? 作为一个繁忙的.net Web开发人员,值得花时间在BDD以及TDD上吗? 当我经历它时,我发现它很有趣,但我很困惑它对我们有什么用处!

我遇到了这个引用,但它实际上意味着什么?

虽然这些工具通常是专门为BDD项目开发的,但它们可以被视为支持测试驱动开发的特定工具形式。 这些工具有助于为无处不在的语言添加自动化功能,这是BDD的核心主题。


首先,一些定义;

TDD是测试驱动开发,顾名思义,我们生产的测试驱动了我们开发的流程。 它通常与Red-Green-Refactor循环一起描述。 所以实际上我们编写了一个单元测试,但它失败了,给了我们一个红色状态,然后我们修复了我们应用程序的代码,直到我们通过测试,给我们一个绿色状态,最后我们重构了我们的应用程序代码和测试代码我们有很好的设计。 良好的TDD通过将每个测试集中在我们想要测试的类中的单个方法上,并注入模拟的依赖关系,因此我们正在测试尽可能少的代码量,这导致测试套件出现单个错误,导致单个错误。

BDD是行为驱动开发,其行为是我们设计过程的驱动因素。 当您遵循BDD流程时,您将与人员进行交流,以确定您的应用程序应如何运行,其功能是什么,并捕获应该运行的场景的一些示例。实际上,我们也可以考虑BDD是一个循环,功能,应用程序应该有,验证应用程序适用于所有场景,可能重构我们的测试,使他们最有意义,并重复一遍。 BDD测试通常需要许多类协作才能生成单一业务功能,因此即使一个bug触发了单一故障,您仍然有大量代码来追踪相关代码。

此时,您可以看到BDD的工作级别高于TDD,事实上,我已经看到BDD外部循环成功用于驱动多个组织中的TDD内部循环,即

Define new business feature
 ---> Add scenario and test: BDD Red
|     -> Add Unit test: TDD Red
|    |   Add application code: TDD Green
|     -- Refactor code: TDD refactor
|    Scenario passes: BDD green
 --- Refactor feature and scenarios: BDD refactor
Feature complete

Gojko Adzic在他的演讲TDD中描述了这一点:打破模具

它如何在Web开发中有用? 就用于收集需求和通过BDD工具的过程而言,BDD非常有用,可以自动确认您的代码库具有业务所需的所有功能。 我发现BDD最适合与许多类合作的集成风格测试,而不是单一测试,只关注单一方法。

您将使用BDD构建您的应用程序逻辑,并且您可以使用它来测试您的大部分网站。 我个人会回避测试用户界面,而是使用诸如“用户搜索BDD”之类的语言工作在代码隐藏中,但是有些人使用Selenium并编写测试来讨论点击和测试框“当用户输入搜索文本框中的BDD然后单击搜索按钮“。

值得花时间在BDD以及TDD作为.NET的繁忙网页开发者吗?

希望现在你应该能够自己回答这个问题。 您需要确定将BDD引入您的流程会带来多大的收益。 您的收益将取决于您选择的团队规模和工具等因素。

我注意到,您正在通过用nBehave标记您的问题来查看BDD工具的纯文本规范表单。 这使您可以让一个BA团队处理纯文本场景并将其提交回来(尽管不要将它们全部留给他们,您需要一些技术输入来保持场景的一致性)。 其他形式的工具(如mSpec)以另一种方式工作,使用C#描述场景并生成纯文本作为构建过程的结果。 我个人使用SpecFlow,它具有nBehave的所有优点,但其测试可以通过nUnit运行器,resharper和您的构建服务器运行。 但是,您可能希望将集成测试与单元测试分开,并报告不同级别的覆盖范围。

最后

虽然这些工具通常是专门为BDD项目开发的,但它们可以被视为支持测试驱动开发的特定工具形式。 这些工具有助于为无处不在的语言添加自动化功能,这是BDD的核心主题。

这意味着BDD工具的工作方式与我们现有的TDD工具类似,并知道如何生成或理解给定时间的BDD语法。 欲了解更多,我建议阅读https://github.com/cucumber/cucumber/wiki/Gherkin。

如果你想更多地了解BDD作为一个过程,那么Liz Keogh有很多非常好的材料,从这里开始http://lizkeogh.com/behaviour-driven-development/

(哎呀,这比我想象的要长很多)


TDD和BDD的关键区别在于范围。 TDD是一种开发实践,而BDD则是一种团队方法。 在TDD中,开发人员在BDD中编写测试时,自动化规范是由用户或测试人员创建的(开发人员将它们连接到测试代码中。)对于以开发人员为中心的小型团队,TDD和BDD实际上是相同。

这里有两个问题的综合答案。

TDD和BDD的一些代码示例可以在这里找到


BDD补充了TDD

有关Cucumber的想法(以及一般的BDD)是利益相关者协助编写场景或可执行规范。 这解决了我们在哪里开始TDD问题。

http://dannorth.net/introducing-bdd

链接地址: http://www.djcxy.com/p/45695.html

上一篇: How BDD complements TDD

下一篇: TDD vs. Unit testing