我为我的C++代码使用Boost Test框架,但它有两个问题,可能是所有C++测试框架都常见的:
无法创建自动测试存根(例如,通过从所选类中提取公共函数).
你不能运行一个测试 - 你必须运行整个'套件'测试(除非你创建了许多不同的测试项目).
有没有人知道更好的测试框架,还是我永远不会嫉妒Java/.NET开发人员可用的测试工具?
我刚推出了自己的框架,CATCH.它仍在开发中,但我相信它已经超过了大多数其他框架.不同的人有不同的标准,但我试图覆盖大部分地方而没有太多的权衡.看看我的链接博客条目,了解品尝者.我的五大特色是:
仅限标题
自动注册基于功能和方法的测试
将标准C++表达式分解为LHS和RHS(因此您不需要一整套断言宏).
支持基于函数的fixture中的嵌套部分
使用自然语言进行名称测试 - 生成函数/方法名称
它没有生成存根 - 但这是一个相当专业的领域.我认为Isolator ++是第一个真正实现这一目标的工具.请注意,Mocking/stubbing框架通常独立于单元测试框架.CATCH特别适用于模拟对象,因为测试状态不会被上下文传递.
它还具有Objective-C绑定.
[更新]
几年前刚回到我的这个答案.感谢所有好评!显然,Catch在那个时代已经发展了很多.它现在支持BDD样式测试(给定/当/时),标签,现在在单个标题中,以及内部改进和改进的负载(例如更丰富的命令行,清晰和富有表现力的输出等).这是一篇更新的博客文章.
看看Google C++测试框架.
它被谷歌用于他们所有的内部C++项目,因此它必须非常好.
http://googletesting.blogspot.com/2008/07/announcing-new-google-c-testing.html
http://code.google.com/p/googletest
Boost.Test允许按名称运行测试用例.或测试套件.或者其中几个.
Boost.Test并不坚持实现main,尽管它确实很容易实现.
Boost.Test不需要用作库.它有单头变体.
我只回答了一个非常相似的问题.我最终使用了Noel Llopis的UnitTest ++.我比boost :: test更喜欢它,因为它没有坚持用宏来实现测试工具的主程序 - 它可以插入你创建的任何可执行文件.它确实遭受了与boost :: test相同的阻碍,因为它需要链接一个库.我使用过CxxTest,它确实比C++中的任何其他内容更接近 - 自动生成测试(虽然它需要Perl)成为你的构建系统的一部分来做到这一点).C++只是不提供.NET语言和Java所做的反射挂钩.Visual Studio Team System中的MsTest工具 - Developer's Edition将自动生成非托管C++的测试存根,但这些方法必须从DLL导出才能执行此操作,因此它不适用于静态库.其他测试框架.NET世界也可能有这种能力,但我不熟悉其中任何一种.所以现在我们将UnitTest ++用于非托管C++,而我目前正在为托管库决定MsTest和NUnit.
我是UnitTest ++的忠实粉丝,它非常轻巧,但却能胜任.您可以轻松地在那里运行单个测试.
好问题!几年前,我永远四处寻找值得使用的东西,并且做得很短.我一直在寻找一些非常轻量级的东西,并不需要我链接到一些图书馆......你知道我可以在几分钟内起床和跑步.
但是,我坚持并最终在cxxtest上运行.
来自网站:
不需要RTTI
不需要成员模板功能
不需要异常处理
不需要任何外部库(包括内存管理,文件/控制台I/O,图形库)
完全作为一组头文件(和一个python脚本)分发.
哇...超级简单!包含一个头文件,派生自Test类,然后您就可以运行了.我们过去四年一直在使用它,我还没有找到任何我更满意的东西.