项目一旦变的复杂,每次新需求的到来都会令人心惊胆战,就像杂技运动员同时抛动多个球一样,稍有不慎就会呼啦掉下来。这个时候,就可以考虑使用测试驱动开发了(Test-Driven Development),它能让我们愉快的抛球。抛球这个比喻出自于图书《测试驱动开发》 Kent Beck 著。
为什么能愉快的抛球?TDD 的做法是把所有的功能都自动化测试,每次新的需求完成以后,就跑一次测试。TDD 在常规的开发顺序之前,需要先写测试,这种感觉有点奇怪,但试过几次之后感觉棒极了。
以下针对 PHP 和 codeception 为例,假如要开发一个留言板的功能。
对用户来讲,正常的流程是:
转化为代码为
$I->amOnPage('/guestbook');
$I->submitForm('#guestbook-form', [
'contact' => 'foo@bar.com',
'content' => '留言内容'
]);
$I->see('留言成功');
对开发者来讲,正常的流程是:
转化为代码为
$model = new Guestbook();
$model->contact = 'foo@bar.com';
$model->content = '留言内容';
$model->save();
$I->seeRecord('Guestbook', ['contact' => 'foo@bar.com', 'content' => '留言内容']);
运行测试,会报出错误,测试不通过。因为我们还没有开始写真正的功能。那么,我们就下来要做的,就是让这几个测试通过。
下边这些是我在做 TDD 之前考虑的几个问题:
其实都很容易解决。
发表评论