当前位置:  开发笔记 > 编程语言 > 正文

C++单元测试框架

如何解决《C++单元测试框架》经验,为你挑选了6个好方法。

我为我的C++代码使用Boost Test框架,但它有两个问题,可能是所有C++测试框架都常见的:

无法创建自动测试存根(例如,通过从所选类中提取公共函数).

你不能运行一个测试 - 你必须运行整个'套件'测试(除非你创建了许多不同的测试项目).

有没有人知道更好的测试框架,还是我永远不会嫉妒Java/.NET开发人员可用的测试工具?



1> philsquared..:

我刚推出了自己的框架,CATCH.它仍在开发中,但我相信它已经超过了大多数其他框架.不同的人有不同的标准,但我试图覆盖大部分地方而没有太多的权衡.看看我的链接博客条目,了解品尝者.我的五大特色是:

仅限标题

自动注册基于功能和方法的测试

将标准C++表达式分解为LHS和RHS(因此您不需要一整套断言宏).

支持基于函数的fixture中的嵌套部分

使用自然语言进行名称测试 - 生成函数/方法名称

没有生成存根 - 但这是一个相当专业的领域.我认为Isolator ++是第一个真正实现这一目标的工具.请注意,Mocking/stubbing框架通常独立于单元测试框架.CATCH特别适用于模拟对象,因为测试状态不会被上下文传递.

它还具有Objective-C绑定.

[更新]

几年前刚回到我的这个答案.感谢所有好评!显然,Catch在那个时代已经发展了很多.它现在支持BDD样式测试(给定/当/时),标签,现在在单个标题中,以及内部改进和改进的负载(例如更丰富的命令行,清晰和富有表现力的输出等).这是一篇更新的博客文章.


+1.单头包括==真棒.
优秀的测试套件.
[doctest](https://github.com/onqtam/doctest)是我对Catch的重新实现,主要关注编译速度 - 查看[FAQ](https://github.com/onqtam/doctest/blob/master /doc/markdown/faq.md#how-is-doctest-different-from-catch)看看他们之间有什么不同
(+1)即使在早期阶段,也是最好和最容易合作的人之一.唯一缺少的是模型,尽管我很少需要它们,所以我没有抱怨.
这个岩石.使用表达式模板替换其他测试套件的各种断言宏的方式非常巧妙.

2> J Miller..:

看看Google C++测试框架.

它被谷歌用于他们所有的内部C++项目,因此它必须非常好.

http://googletesting.blogspot.com/2008/07/announcing-new-google-c-testing.html

http://code.google.com/p/googletest



3> 小智..:

Boost.Test允许按名称运行测试用例.或测试套件.或者其中几个.

Boost.Test并不坚持实现main,尽管它确实很容易实现.

Boost.Test不需要用作库.它有单头变体.



4> Brian Stewar..:

我只回答了一个非常相似的问题.我最终使用了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.



5> yrp..:

我是UnitTest ++的忠实粉丝,它非常轻巧,但却能胜任.您可以轻松地在那里运行单个测试.



6> Scott Saad..:

好问题!几年前,我永远四处寻找值得使用的东西,并且做得很短.我一直在寻找一些非常轻量级的东西,并不需要我链接到一些图书馆......你知道我可以在几分钟内起床和跑步.

但是,我坚持并最终在cxxtest上运行.

来自网站:

不需要RTTI

不需要成员模板功能

不需要异常处理

不需要任何外部库(包括内存管理,文件/控制台I/O,图形库)

完全作为一组头文件(和一个python脚本)分发.

哇...超级简单!包含一个头文件,派生自Test类,然后您就可以运行了.我们过去四年一直在使用它,我还没有找到任何我更满意的东西.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有