我的理解是:
BDD是一种评估软件行为方式并编写接受测试的过程。您需要使用TDD方法编写代码,通过编写方法的单元测试并围绕单元测试构建类来编写代码(编码、测试、重构)。编写代码后,您需要进行测试以检查其是否满足最初的接受测试。
有经验的人可以评论我的解释,并演示如何在一个简单的应用程序中使用这些敏捷原则?我看到有关BDD和TDD的文本在分别的出版物中详细介绍,但我正在寻找这两个过程如何在现实世界的开发中相互补充。
尝试将它们视为示例,而不是测试。
对于整个应用程序,我们提出了一个用户可能使用该应用程序的示例。该示例是行为的具体实例,可说明该行为。例如,我们可能会说收银应用程序允许退款。使用该收银机的收银员将熟悉弗雷德为退还微波炉而带回微波炉的情形:
假设弗雷德购买了一台100美元的微波炉
当他为退款带回微波炉时
那么他应该获得100美元返还到信用卡上。
现在很容易想到其他场景;例如,弗雷德获得折扣只退回90美元,或者弗雷德自己损坏了微波炉,我们拒绝退款等。
当我们真正开始编写收银软件时,我们将代码分解成小部分;类、函数、模块等。我们可以描述代码的行为并提供示例。例如,我们可能会说退款计算器应考虑折扣。这只是退款场景的一小部分。我们有一个名为RefundCalculator
的类,以及一个具有方法shouldTakeDiscountsIntoAccount
的单元测试。
我们可以在注释中放入示例步骤,例如:
// Given a microwave was sold at 10% discount for $100
...
// When we calculate the refund due
...
// Then the calculator should tell us it's $90.
...
BDD故事有两种方法, 命令式和声明式。对于习惯于编写单元测试脚本的开发人员来说,他们可能更容易编写命令式故事。
然而,在采用敏捷测试优先/测试驱动开发方法时,声明式方法会产生与开发故事紧密相关的BDD叙述。这是因为BDD叙述继续反映业务领域语言而不是编程领域。