我想听听什么是推荐的C ++单元测试框架,或者如果没有一个框架,什么是公认的流程图,可以让我选择一个框架。

评论

github.com/google/googletest

#1 楼

单元测试框架比较标准

您应该考虑以下重要标准,以比较C ++单元测试框架:




兼容性:该框架是否与您的项目。您可能正在使用诸如-fno-rtti之类的选项,然后某些框架无法编译。

用户友好性:编写测试需要多少工作。 C ++没有反射,因此框架必须以某种方式解决测试注册。

功能:它可以做您需要做的事情吗?根据Google Testing Blog上的帖子,大多数框架具有必要的功能,并且在第1点和第2点上存在很大差异。

受欢迎程度:人们是否了解框架。这对于自由软件尤其重要,而不是限制潜在的参与者基础。

流行框架及其流行度度量

要度量流行度,搜索Stack Overflow和GitHub。以下统计数据是2016年1月收集的,随着时间的推移可能会发生巨大变化;同样,这里没有显示的趋势可能比绝对数字更重要。在这样。搜索单个框架,我们发现:



Google测试:857个问题(关键字词[googletest]

CppUnit:203个问题(关键字词[cppunit]

捕获:12个问题(关键字词[catch-unit-test]

GitHub流行框架

在GitHub上,大约有461,000个用于查询“语言”的存储库: C ++”。

GitHub:




Google测试:1,870,016个C ++文件(搜索词:"include gtest.h"

CppUnit :297,525个C ++文件(搜索词:"include cppunit"

捕获:11,888个C ++文件(搜索词:"include catch.hpp"

CppUnitLite:1,214个C ++文件(搜索词:"include CppUnitLite"

(单击左侧菜单中的C ++后,“我们已经找到xxx代码结果”中的数字)


似乎Google Test显然是SO + GitHub人气竞赛的赢家,最可能是因为它已被LLVM和Chromium等大型项目采用。

评论


在某处是否有一些优点比较?他们的功能?

– einpoklum
16年1月9日在15:05



@einpoklum我的论点是,它们几乎都是相同的,所以您应该去找最受欢迎的,或者背后有最大“动量”的那些。关于功能比较,我知道这些被引用较高(较旧)的博客gamefromwithin.com/…、accu.org/index.php/journals/1326和Wikipedia en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C.2B.2B

–user7610
16年1月9日在15:26

#2 楼

在选择测试框架时,我想补充一些其他要点来补充社区Wiki的答案,这可以解决您选择测试工具的问题:


价格-免费或价格合理测试框架(例如Google Test和CppUnit)几乎总是在流行度上领先,但可能无法满足您的其他要求。
要求的测试覆盖范围:


如果您要测试一些一个简单的免费软件项目(尽管许多此类软件实际上比商业项目要好得多的测试)或游戏的用户代码,如果您执行任何单元测试,那么您将处于领先地位。
如果您正在编写用于金融应用程序或电信系统,您可能需要或被要求执行100%的代码覆盖率行,即,在测试期间,代码的每一行应至少执行一次。
如果您正在编写低临界空间,军事,医疗或航空应用将需要执行100%的行覆盖率和100%的决策覆盖率-即执行每条线并行使通过决策点的每种方式。
如果您在上述任何领域中编写安全关键代码您将需要在操作码级别执行100%的代码和100%的决策覆盖率,而不仅仅是行覆盖率。


测试工具或它所必须的任何标准的任何必需认证进行测试-要求MISRA兼容在嵌入式软件行业中并不少见,但是在某些情况下还需要其他标准。
制作每个测试用例的典型时间量-两者之间可能会有很大差异工具,对间接成本有很大影响。
测试工具是否可用于您的部署平台和工具链以及安装它的时间和成本。
该工具是否要求您以任何方式修改代码以运行测试-在上述某些行业中,必须在未修改的源代码上执行测试。

自动化测试的适用性-如果您打算进行持续集成或使用极端/敏捷实践,那么能够自动化您的测试和测试报告将是一项巨大的资产。那么失去测试工具将是一场灾难。
对测试脚本进行版本控制的能力至关重要。
同上测试报告/结果-您还需要能够以以下格式发布测试结果:无需复制测试工具即可访问。
您还需要将测试和结果追溯到需求和源代码。

如果要对嵌入式设备进行单元测试, ,安全关键软件,那么只有很少的工具可以所需的标准支持和认证。 Rational Test RealTime和LDRA Testbed就是示例-但它们并不便宜,每个开发人员每年每个许可证的费用高达数万美元。

免责声明-我不为任何提及的公司工作以上,但是我在安全关键的嵌入式实时行业中广泛工作,因此使用了他们的产品。