http://www.gamesfromwithin.com/articles/0412/000061.html,在这篇文章中,Noel Llopis提出了一个对C++ test framework评判的一些依据,按照Noel Llopis给出的重要性,我节略在这里。
1.加入新测试最小化工作量
2.便于修改和移植(作者的意思是说比如RTTI,STL,Exception这些高级特性可能妨碍在不同的平台,不同版本编译器下面的可移植性)
3.便于装配/拆卸测试环境
4.对异常以及崩溃很好的控制
5.好的断言功能
6.支持不同的输出方式
7.支持测试套件(suites)
按照这个标准,Noel Llopis对下面的test framework进行了评价
CPPUnit
1.工作量多
2.CPPUnit能在Windows , Linux上面运行,功能进行了很好的模块化,但是另一方面,CPPUnit需要RTTI,STL,或者异常(作者不是很肯定)
3.
4.CPPUnit使用protectors包装测试,并且捕捉所有的异常(尝试识别某些异常),Linux下面不会捕捉系统异常,但是要增加自定义的包装是很容易的。
5.很好,支持一个最小集合的断言语句,包括比较浮点数。
6.支持
7.支持
总体评价:Overall, CppUnit is frustrating because it's almost exactly what I want, except for my most wanted feature. (CPPUnit够闷的,不过我觉得改进易用性应该可以期待)
Boost.Test(我尝试使用,在VC.Net 2003下面遇到链接问题,还没有解决)
1.基本满足
2.和CPPUnit类似,但强调的是改代码的难度以及依赖Boost本身
3.避开了常规的setup/teardown结构,可以不需要动态生成fixture 对象,可以将fixture对象放到stack里面。
4.Boost.Test在这方面超过了所有的其他竞争对手
5.Yes
6.大概能支持,但改变输出这件事情并不是很容易
7.支持,...(这句如何理解?Yes, but with a big catch)
Overall,Boost.Test is a library with a huge amount of potential. It has great support for exception handling and advanced assert statements. It also has other fairly unique functionality such as support for checking for infinite loops, and different levels of logging. On the other hand, it's very verbose to add new tests that are part of a suite, and it might be a bit heavy weight for game console environments.
CppUnitLite(由于作者比较了一个被他改动的版本,我不再关注)
NanoCppUnit(这个库甚至需要你去从web pages上面copy代码,然后自己搞一个工程,我觉得我不太喜欢这种方式的package发布,毕竟,我希望少操心,所以我也不关注)
Unit++
首先指出一个独特的特性:More C++ Like,作者的意思是它没有使用宏,的确,前面几种framework开始一个测试的时候都使用了宏,这在许多C++ Library中是惯例,用来简化一些代码。我们通过从基类继承从而创建测试包,当然在其他framework里面本质也是这样,但是都放在幕后进行,宏掩盖了具体情况。
1.不好
2.一般般
3.不支持
4.表现平均
5.文档没说如何支持不同的输出
6.不支持浮点数
7.支持
CxxTest
首先作者认为文档最好(很重要?)另外作者指出,CxxTest的作者Erez Volk意识到我们是在写工具帮助测试C++程序,所以不必受限于C++的特征。
1.非常好
2.很好
3.支持
4.很好
5.yes
6.yes
7.yes
文章最后给出一个综述:是个表现好的,CPPUnit, CppUnitLite, Boost.Test, CxxTest,作者本人喜欢CxxTest.
(完)