我知道关于C++单元测试框架的建议已经存在一些问题,但所有答案都没有帮助,因为他们只是推荐其中一个框架,但没有提供有关(特征)比较的任何信息.
我认为最有趣的框架是CppUnit,Boost和新的Google测试框架.有人做过任何比较吗?
一个新的播放器是Google Test(也称为Google C++测试框架),但它非常好用.
#includeTEST(MyTestSuitName, MyTestCaseName) { int actual = 1; EXPECT_GT(actual, 0); EXPECT_EQ(1, actual) << "Should be equal to one"; }
主要特点:
手提
致命和非致命的断言
轻松断言信息性消息:ASSERT_EQ(5, Foo(i)) << " where i = " << i;
Google Test会自动检测您的测试,并且不需要您枚举它们才能运行它们
可以轻松扩展断言词汇表
死亡测试(参见高级指南)
SCOPED_TRACE
用于子程序循环
您可以决定运行哪些测试
XML测试报告生成
固定装置/模拟/模板 ......
我刚推出了自己的框架,CATCH.它仍在开发中,但我相信它已经超过了大多数其他框架.不同的人有不同的标准,但我试图覆盖大部分地方而没有太多的权衡.看看我的链接博客条目,了解品尝者.我的五大特色是:
仅限标题
自动注册基于功能和方法的测试
将标准C++表达式分解为LHS和RHS(因此您不需要一整套断言宏).
支持基于函数的fixture中的嵌套部分
使用自然语言进行名称测试 - 生成函数/方法名称
它还具有Objective-C绑定.该项目由Github托管
有关讨论,请参阅此问题.
他们推荐文章: 探索C++单元测试框架Jungle,作者:Noel Llopis.最近的:C++测试单元框架
我还没有找到一篇将googletest与其他框架进行比较的文章.
Boost测试库是一个非常好的选择,特别是如果你已经在使用Boost.
// TODO: Include your class to test here. #define BOOST_TEST_MODULE MyTest #includeBOOST_AUTO_TEST_CASE(MyTestCase) { // To simplify this example test, let's suppose we'll test 'float'. // Some test are stupid, but all should pass. float x = 9.5f; BOOST_CHECK(x != 0.0f); BOOST_CHECK_EQUAL((int)x, 9); BOOST_CHECK_CLOSE(x, 9.5f, 0.0001f); // Checks differ no more then 0.0001% }
它支持:
自动或手动测试注册
许多断言
集合的自动比较
各种输出格式(包括XML)
赛程/模板 ......
PS:我写了一篇关于它的文章可能会帮助你入门:C++单元测试框架:一个Boost测试教程
维基百科有一个完整的单元测试框架列表,其中包含可识别支持与否的功能的表.
我最近发布了xUnit ++,特别是作为Google Test和Boost Test Library的替代品(查看比较).如果您熟悉xUnit.Net,那么您已准备好使用xUnit ++.
#include "xUnit++/xUnit++.h" FACT("Foo and Blah should always return the same value") { Check.Equal("0", Foo()) << "Calling Foo() with no parameters should always return \"0\"."; Assert.Equal(Foo(), Blah()); } THEORY("Foo should return the same value it was given, converted to string", (int input, std::string expected), std::make_tuple(0, "0"), std::make_tuple(1, "1"), std::make_tuple(2, "2")) { Assert.Equal(expected, Foo(input)); }
主要特点:
令人难以置信的快速:测试同时运行.
手提
自动测试注册
许多断言类型(Boost在xUnit ++上没有任何内容)
本地比较集合.
断言分为三个层次:
致命错误
非致命错误
警告
易断言记录:Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
测试记录:Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
赛程
数据驱动测试(理论)
根据以下内容选择要运行的测试:
属性匹配
命名substring matchin
测试套房