TDD和BDD的区别 (TDD vs BDD)

您所在的位置:网站首页 驱动开发和软件开发 TDD和BDD的区别 (TDD vs BDD)

TDD和BDD的区别 (TDD vs BDD)

2024-07-11 15:59| 来源: 网络整理| 查看: 265

原文链接 The Difference Between TDD and BDD

前言

如果你关注软件开发最佳实践方面的话题,你肯定听说过测试驱动开发(TDD - Test Driven Development) 和行为驱动开发(BDD - Behavior Driven Development)。这篇文章会为你阐述这两种模式的含义并举例,同时对二者进行比较。

测试驱动开发 (TDD)

当我第一次听到TDD这个词,从字面上理解,觉得很简单,就是用于驱动软件开发的测试。

这没有错,如果对TDD作进一步的解释,这个过程可以进一步分解为5个步骤:

首先,开发者在码业务前写一些测试用例运行这些测试用例。结果肯定是运行失败,因为测试用例中的业务逻辑还没实现嘛开发者实现测试用例中的业务逻辑再运行测试用例, 如果开发者代码能力不错,这些测试用例应该可以跑通了(pass)对业务代码及时重构,包括增加注释,清理重复等。因为没人比开发者自己更了解哪些代码会对哪些部分造成影响从而导致测试失败(fail)

当需要开发新需求新功能时,重复上述步骤。流程如下图所示:

在这里插入图片描述

TDD举例

我们通过举例来了解一下如何实践TDD。例子中的代码可以从github上获取tdd-vs-bdd。将代码clone下来,执行命令npm install && grunt

假设我们想写一个计算阶乘的函数(这是一个很刻意的例子,但是这个例子对我们指出TDD和BDD的区别很有帮助)。TDD的常用方式是运行某函数,然后断言结果满足某个值。

在阶乘的例子中,我们使用的javascript测试框架是Mocha。废话不说,上代码:

var assert = require('assert'), factorial = require('../index'); suite('Test', function (){ setup(function (){ // Create any objects that we might need }); suite('#factorial()', function (){ test('equals 1 for sets of zero length', function (){ assert.equal(1, factorial(0)); }); test('equals 1 for sets of length one', function (){ assert.equal(1, factorial(1)); }); test('equals 2 for sets of length two', function (){ assert.equal(2, factorial(2)); }); test('equals 6 for sets of length three', function (){ assert.equal(6, factorial(3)); }); }); });

显然上述测试会失败,因为我们尚未实现函数功能。所以接下来我们需要实现满足上述测试用例的阶乘函数。代码如下:

module.exports = function (n) { if (n


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3