c# - BDD如何补充TDD

标签 c# asp.net tdd bdd nbehave

自从我听说bdd(行为驱动开发)以来,我一直在想它是否能补充tdd?它在web开发中真的有用吗?作为一个忙碌的.net web开发人员,花时间在bdd和tdd上值得吗?当我看完它后,我发现它很有趣,但我不知道它对我们有多有用!
我无意中听到这句话,但它到底是什么意思?
尽管这些工具通常是专门为bdd开发的
项目,它们可以被看作是
支持测试驱动开发。这些工具用于将自动化添加到
无处不在的语言,是bdd的中心主题。

最佳答案

第一,一些定义;
tdd是测试驱动的开发,顾名思义,我们生成的测试驱动我们的开发流程。它通常与红绿重构循环一起描述。所以在实践中,我们编写一个单元测试,它失败了,给我们一个红色的状态,然后我们修复我们的应用程序代码,直到我们通过测试,给我们一个绿色的状态,最后我们重构我们的应用程序代码和我们的测试代码,以便我们有一个好的设计。好的tdd的工作原理是将每个测试集中在类中要测试的单个方法上,并注入模拟依赖项,因此我们测试的代码量尽可能小,这会导致测试套件中的单个bug导致单个失败。
bdd是行为驱动的开发,其中行为是设计过程的驱动因素。当您遵循bdd流程时,您需要与其他人联系,以确定应用程序应该如何运行,它的功能是什么,并捕获一些应该在其中运行的场景示例。事实上,我们还可以将bdd看作一个周期,在这个周期中,我们收集应用程序应该具有的新特性,验证应用程序是否适用于所有场景,可能重构我们的测试,使它们最有意义,并重复一遍。bdd测试通常需要多个类协作来生成单个业务特性,因此即使bug只触发一个失败,您仍然有大量代码来跟踪负责的代码。
在这一点上,您可以看到bdd的工作级别高于tdd,事实上,我已经看到bdd外循环成功地用于在多个组织中驱动tdd内循环,即。
定义新业务功能
--->添加场景和测试:bdd red
|->添加单元测试:TDD红色
||添加应用程序代码:TDD绿色
|--重构代码:tdd重构
|场景通过:bdd green
---重构特性和场景:bdd重构
功能完成
Gojko Adzic在他的演讲中对此做了更好的描述TDD:Breaking the mould
它在web开发中究竟有何用处?
bdd对于收集需求和通过bdd工具自动确认代码库具有业务所需的所有特性的过程非常有用。我发现bdd最适合与集成风格的测试一起工作,它与许多协作的类一起工作,而不是专注于单一方法的单元测试。
您可以使用bdd来构建您的应用程序逻辑,并且可以使用它来测试您的大多数网站。我个人不会测试ui,而是在代码背后工作,使用诸如“当用户搜索bdd时”之类的语言,但是有些人使用selenium编写测试,讨论单击和测试框,“当用户在搜索文本框中输入bdd并单击搜索按钮时”。
作为.NET中忙碌的Web开发人员,花时间在BDD和TDD上值得吗?
希望你现在能自己回答这个问题。您需要决定将bdd引入您的流程将获得多少好处。您的好处将根据您选择的团队规模和工具等因素而有所不同。
我注意到您正在查看bdd工具的纯文本规范表单,方法是用nbehae标记您的问题。这使您能够让ba团队处理纯文本场景并将其提交回来(尽管不完全交给他们,但您需要一些技术输入来保持场景的一致性)。其他形式的工具(如mspec)则以另一种方式工作,使用c来描述场景,并生成生成生成过程的纯文本。
我个人使用specflow,它具有nbehave的所有优点,但是它的测试可以通过nunit runner、resharper和您的构建服务器运行。但是,您可能希望将集成测试与单元测试分开,并报告不同的覆盖级别(例如)。
最后
尽管这些工具通常是专门为bdd开发的
项目,它们可以被看作是
支持测试驱动开发。这些工具用于将自动化添加到
无处不在的语言,是bdd的中心主题。
这意味着BDD工具以类似于我们现有TDD工具的方式工作,并且知道如何生成或理解那时的给定的BDD语法。关于这方面的更多信息,我建议阅读https://github.com/cucumber/cucumber/wiki/Gherkin
如果你想了解更多关于bdd的过程,那么liz keogh有很多非常好的材料,从这里开始http://lizkeogh.com/behaviour-driven-development/
(哇哦,这比我开始时想象的要长得多)

关于c# - BDD如何补充TDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19130493/

相关文章:

c# - IClassFactory 由于以下错误 : 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)) 而失败

javascript - asp.net 如何在点击文本框时显示一个div。使用 jquery

django - 为 Django 为 TDD 设置适当的测试

java - 何时使用 TDD 而不是 BDD,反之亦然

c# - 在具有物理和刚体的移动物体上与玩家保持一致在 Unity 中不起作用

c# - 这个多行 if 语句是否太复杂?

asp.net - asp :ButtonField click 之前的 Javascript

c# - Moq中的设置方法,调用不明确

c# - WPF:只能使用 StaticResource 一次

c# - 在网站上处理信用卡订阅的最佳方式是什么?