TDD的粒度

一般来讲,TDD的开发方式由三个步骤组成:
1. 编写一个失败的测试用例
2. 编写功能代码让这个测试通过
3. 如果代码有坏味道,就Refactor,否则goto 1

但是实际开发中,在哪一个层面上编写这个失败的用例是一个更为关键的问题。比如说一个Invitation的需求,我们可以

1. 用Selenium编写一个Acceptance Test,
2. 对Controller 开始编写一个Functional Test
3. 编写一个ActionMailer Test.
4. Invitation Model的 Unit Tests

选择哪一个测试好呢?显然这4个测试的粒度是依次递减的。我习惯于从最小粒度的Test开始编写,因为这样我能够保证每次都以最快速度来通过测试,步入下一个迭代。

这里有一个疑问,大粒度的Test往往能够覆盖细粒度Test所描述的行为,那么细粒度Test是否是一种增加开发成本的冗余?显然不是。一个Model里面的Bug在Functional Test里面发现和Unit Tests里面发现成本是不一样的。

从最小粒度的Test开始并不是容易的事情,因为当我从一个失败的Test中的反馈才知道通过这个Test还要从更底层开始实现,那么这个Test的粒度很有可能过大了。我的做法是注释掉这个Test,在底层编写更细粒度的Test,通过以后回过头来处理这个测试。有很强的Prefactoring能力也许会降低这种探索的成本,不过对于我这种智商,还是从最小粒度的测试开始比较好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值