C++测试框架的选择
(金庆的专栏)
本文以表格形式总结了 “Exploring the C++ Unit Testing Framework Jungle” ( http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle ) 一文对各种单元测试框架的比较,并添加了原文所还没有加入的Google Test. 并添加了另一项特性比较,即对Mock对象的支持。
各比较项为:
1.加入新测试最小化工作量
2.便于修改和移植
3.便于装配/拆卸测试环境(fixtures)
4.对异常以及崩溃很好的控制
5.好的断言功能
6.支持不同的输出方式
7.支持测试套件(suites)
8.对Mock对象的支持
框架 | 1.工作量 | 2.可移植性 | 3.fixtures | 4.异常 | 5.断言 | 6.各种输出 | 7. 测试套件 | 8.Mock |
CPPUnit | 多 | 需RTTI, STL | 支 持 | 支持 | 很好 | 支持 | 支持 | 不支持 |
Boost.Test | 一般 | 需RTTI, STL, Boost | 支 持 | 支持最好 | 支持 | 支持 | 支 持 | 不支持 |
CppUnitLite | 少 | 很好 | 不 支持 | 不支持 | 很差 | 不支持 | 不 支持 | 不支持 |
NanoCppUnit | 少 | 仅Windows | 支 持 | 未知 | 支持 | 不支持 | 支持 | 不支持 |
Unit++ | 很多 | 一般 | 不 支持 | 一般 | 不支持浮点数 | 未知 | 支 持 | 不支持 |
CxxTest | 少 | 很好 | 支 持 | 支持 | 支持 | 支持 | 支持 | 支持 |
Google Test | 少 | 很好 | 支 持 | 支持 | 很好 | 未知 | 支持 | 不支持 |
原作者喜欢:CppUnit, Boost.Test, CppUnitLite, 和 CxxTest.
从支持Mock对象这一点来看,只有CxxTest支持。而Mock对于单元测试是很关键的。
另外摘录一个对CxxTest的评论( http://www.cppblog.com/shuiyuan2004/archive/2007/08/29/31105.html )
CxxTest添加新的测试工作量非常小;无须注册测试用例;可移植性很好;便于装卸;控制异常、崩溃方面的能力也不错;拥有良好的断言功能;支持多种输出方式;支持测试套件。
最大的优点:编译即测试方式,并且可以双击结果行立即定位到相应的源代码,相当吸引人;支持多种输出,输出结果较为详细;编写测试简单;
缺点:需要用到perl对测试代码进行文法扫描,生成可执行代码,需要用到makefile文件(不是必须);准备工作比较麻烦。