跳至正文
首页 » 博客 » BDD in .NET for Complete Initiates

BDD in .NET for Complete Initiates

您很可能听说过行为驱动开发 (BDD)。也许只是在流行语疲劳的背景下,想知道 “有多少种不同的软件方法的首字母缩略词以DD结尾?”无论您的犬儒主义程度如何,或者缺乏犬儒主义,BDD都值得一看。

在过去的几年中,我的很多工作都涉及编写干净代码这一主题的指导和指导,我经常告诉最初持怀疑态度的开发人员,他们应该编写BAs和经理或多或少可以阅读的方法 (无论如何,在与业务逻辑有关的地方)。这并不像听起来那么牵强。想想看起来像这样的代码。

公共bool IsCustomerOrderValid(CustomerOrder ordertobeevalued)
{
foreach(var individualineitem in ordertobeevalued.LineItems)
{
if (!_Productstockchecker.DoWeHaveInStock (individiallineitem.Product))
返回false;
}
返回true;
}

想象一个非技术人员能够看到这个并理解发生了什么,真的会这么夸张吗?接受要评估的订单,查看其每个行项目,并检查它们包含的产品是否有库存。你不需要成为一个程序员就能知道这里发生了什么。

BDD从10,000英尺

BDD从本质上讲,就是接受这个想法,并通过使面向领域的对话成为软件接受的一部分来扩展它。暂时不要担心 “如何”。可以说,您和各种非技术利益相关者可以坐在一起,用简单的英语编写测试,这些测试可以运行以证明系统需求得到满足。那很强大。

要了解如何,我们必须先在时间上绕道而行。BDD作为测试驱动开发 (TDD) 的风格出现。在测试驱动开发中,对生产代码的每次修改都是由失败的单元测试驱动的。这引起了很多测试的精神 (例如),“当我将null传递给该类构造函数时,它应该抛出一个空参数异常” 以及表达业务目的的测试。TDD本身并不具体说明您为驱动生产代码修改而编写的测试的粒度级别。

BDD通过对测试性质的更多偏好而成为该过程的扩展和缩小。测试本身开始具有以下属性。

  1. 描述性、对话式名称
  2. 表示验收标准的软件
  3. 在对软件的用户/利益相关者有意义的粒度级别。

因此,现在有一个框架,您可以通过使用可执行规范描述系统的当前缺点来驱动对生产代码的所有修改。为了将其引入细节领域,请考虑BDD的这个示例,随着时间的推移,您将会看到更多。假设你正在开发一个计算器应用程序,到目前为止,你已经实现了加法、减法和乘法。接下来是组织。但是,请记住,你不只是打开你的IDE,并开始黑客在生产代码。您首先需要一个失败的验收测试来描述系统的缺点。

场景: 常规数字
* 给定我已将3输入到计算器
* 并且我已按divide
* 并且我已将2输入到计算器
* 当我按equal
* 时,结果应1.5在屏幕上

这就是你的测试的样子。有一个测试运行器,它了解如何解析这个英语,将其翻译成您的域中的代码,并执行它。所以,当你需要添加除法功能时,你要做的第一件事就是描述成功的样子。可以这么说,这使您更容易关注奖品。因此,这种方法不是某种纯粹的过程方法,而是一种令人耳目一新的务实方法。

它是如何工作的?

您可能已经注意到,我提供的英语可读文本是会话的。每个以 “给定” 或 “何时” 或你有什么开头的语句都有点生龙活骨。这是因为它是用一种非常易读的语言编写的,称为 “ Gherkin ”,它被描述为 “商业可读的,特定于领域的语言”。然后,一个被称为 “ 黄瓜 ” 的测试运行器通过解析Gherkin并将其映射到您为运行应用程序而编写的实际代码来执行这些验收测试。

为了更具体地将概念带回家,您必须将英语映射到验收测试代码中的实际方法。因此,您将有一个方案将 “给定” 的文本绑定到C # 源方法,例如通过包含文本 “我已输入 (.*) 到计算器” 的属性。此属性将位于将整数x作为参数的方法的顶部,并且在该方法中,您可能会实例化一个计算器,然后调用Calculator.Press(x)。

这就是它的全部内容。你用英语写句子,向任何感兴趣的人展示系统应该如何工作,然后你写代码表达这些句子。结果是一系列可执行的测试,这些测试可以很好地描述系统具有哪些功能以及当前正在构建或不起作用的功能。愤世嫉俗的人可能会说,最大的好处是能够告诉项目经理停止询问状态,去阅读测试运行的报告。乐观主义者会说,最大的好处是缩小了技术和非技术利益相关者在理解系统功能方面的差距。

他们都是对的。

回到本系列的下一篇文章中,我将向您展示如何从头开始执行此操作。NET代码库。

Infragistics终极15.2在这里。下载看到它的力量在行动!

</p