2月16日上午,第一天的培训开始。
首先当然应该说说单元测试的必要性,我很欣赏JUnit In Action这本书里面列的几条理由:
带来更大的测试范围。单元测试能够更精确地发现问题,能覆盖更广泛的情况,当然,使得项目更可靠。
带来团队协作的可能。单元测试能够让我们写一点测一点,保证每次提交的质量,而且,团队协作时要是出了问题,找起责任人来也要方便得多。
防止衰退,减少调试。好的单元测试可以带来自信,也给予我们重构的勇气,同时作为一个副作用,一组好的测试用例能够精确的定位问题,我们或许就省去很多调试的时间。
使得重构可行。没有单元测试,谁知道我们是在做重构还是在拆房子呢。
改进实现设计。这个很意外!为了方便测试,开发者会开发出更容易测试的代码,往往这就意味着这些代码更容易维护和更改,而且使得被测函数变得小巧灵活,易于调用。嗯,如果我们真的认真使用一下自己做的东西之后应该就能体会“愚蠢的客户”到底是怎么回事了。
当作开发者文档来用。测试用例就是这些函数的API!这真是一件奇妙的事情,我们早该想到这点的。
非常有趣。是的,非常有趣,试试就知道了!
今天的重点是测试驱动开发的体验,为了方便实施自动单元测试,一个成熟易用的测试框架当然必不可少。我们项目采用C++开发,CppUnit当然成了最佳选择。
CppUnit非常好用,特别是它的帮助文档中还有贴心的“CppUnit Cookbook”和“Money, a step by step example”,使得我们很容易入手,不过真正麻烦的是:何时做测试、如何选择测试用例和如何选择测试的粒度。