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的一些代码示例可以在这里找到
有关Cucumber的想法(以及一般的BDD)是利益相关者协助编写场景或可执行规范。 这解决了我们在哪里开始TDD问题。
http://dannorth.net/introducing-bdd
链接地址: http://www.djcxy.com/p/45695.html下一篇: TDD vs. Unit testing