TDD强调测试先行,如果我们已经把tasking做好了,确定了每一个task的scope,我先写代码再写测试,又有什么不适合呢?为什么一定要测试先行?
试想,我们先写实现再写测试,会出现哪些问题?我们的功能代码的正确性和完整性,不能快速验;我们设计出来的代码很有可能很难写测试;我们写的测试可能只是基于实现的功能去写的,而不是在用户视角基于需求去写的。
那么测试先行,有哪些好处呢?
首先,tasking帮助我们分离关注点,测试先行更能保证我们开发的时候focus在当前task的实现,并且快速实现并且验证。我们的test case聚焦在当前的task,能够保证我们基于需求写测试;test case驱动我们的代码实现,保证我们的代码设计与实现刚好满足需求,防止过度设计。
其次,很多人都会觉得测试不好写,而人是一种趋利避害的高等动物,测试先行,会让我们想办法让测试更容易编写,也可以保证我们的代码更易于测试。
最后,测试先行会驱动我们提前思考设计,写出来的代码质量更高,坏味道更少。