在学习Ruby on rails 的过程中,真正体验到了TDD和敏捷开发的乐趣,谈一点感想。
TDD与其说是Test Driven Development,不如说是Test Driven Design。
测试先行不同于先编码后测试的最重要一点就是,先编些测试能够在编码前就能思考类和方法的行为,期望输入和期望输出。设计和编码之间的鸿沟最大限度的得到了解决。
Test First 永远不等于"Test Earlier" !
许多自称理解了TDD的人自以为只要懂得了测试的重要性就行了,是否先行并不重要。
在我做项目的经验中,有时候在开发过程中没有写单元测试,而后来上面要求提交单元测试。这时候写单元测试简直就是一场噩梦,因为生米已经煮成了熟饭:
- 代码和J2EE API混在一起,JNDI, EJB , Servlet等。脱离容器没有办法测试。
- 各个模块之间藕合在一起。
这时候最好的交差办法就是做一些"Mock Unit Test",写一些假的单元测试,比如说get,set方法的测试。
最要命的是重构也非常困难,Unit Test 和Refactoring之间的关系就像鸡和蛋一样,没有Unit Test ,Refactoring其实就是痛苦的Debug过程。
而如果测试先行的话,整个开发过程中我的代码都是可单元测试的,只有这样才能保证敏捷开发的顺利进行。