Modern UnitTest++ replacement
编辑:这个问题可能因为"不是一个真正的编程问题"而被取消投票。我只能反驳"尼娅!"现在我发现这个问题是直接相关的,应该会有所帮助。
我有条不紊地升级我的源代码以获得C++ 11次,而我的许多代码交互的一个部件是UnTest++。
我将我的每一个实现
1 2 3 | TEST(testname) { // test code } |
声明。
现在,UnitTest++已经有8年的历史了,它的编译仍然很好,所以我没有迫切需要替换它。然而,我发现随着网站和SourceForge的关闭,它可能不再被维护(尽管它的现有功能看起来确实足够可靠,但这是一个坏迹象)。
因此,即使我的代码现在工作得很好,但我现在可以提前而不是晚些时候切换到一个更好的系统,因为这样可以减少将来的翻译负担。
我环顾四周,似乎有几个选择。特别有趣的是libunittest和其他类似catch的工具,后者只是header。
我的问题是,对于那些在过去和其他单元测试系统中可能有过UnitTest++经验的人来说,什么对您有效,如果您有任何建议的话。我正在寻找一些非常便携的东西,它除了C++ 98/03或C++ 11编译器(GCC,Clang/MSVC)和标准库外,没有外部依赖性,而且头文件只不过是一个加号,但不是必需的。
所以我想我的偏好确实倾向于缩小选择范围。即使有了UnitTest++,我也很享受它的可移植性和自包含性,但是我必须编写一个好的大约100行代码来扩展它,使其在两个方面对我来说更加灵活:
- 允许我指定要运行的特定测试(无论是按名称选择测试,还是按实现它们的源文件选择测试,还是按测试套件名称)
- 自定义测试的报告行为,例如显示每个测试的计时数据,并在最后汇总总计--实际上我对这项功能和行为有点不满意,例如,我不知道如何配置UnitTest++以应用详细的测试报告器来运行未放置在测试套件中的测试。
一个完美的答案应该是这样的,除了一个支持UnitTest++的人之外,其他人都没有!但那篇文章已经10年了!!
你可能会发现谷歌测试是有用的。它支持UnitTest++所做的一切以及更多的工作,并且它仍然得到维护(并且经常在Google中使用)。此外,它还有一个相应的模拟库,即用于创建模拟的Google Mock,对于创建模拟实现非常有用。
我还有两个:
- CPPT
- cxtest(尚未测试)
两者都是积极发展的。
CPPTthat is extremely portable [...]
[...] beyond a C++98/03 or C++11 compiler (gcc, clang, msvc) and the
standard libraries
cpputest可以与各种编译器和平台一起使用——它也用于嵌入式系统。此外,AT还有一个内置的C接口。
and which has zero external dependencies
没什么好说的:下载/签出和构建,完成。
and where being header-only is a plus but not necessary.
不幸的是,cpputest不可能做到这一点,它需要它的testlibrary进行链接。
allow me to specify specific tests to run
可能的,也在手册中解释过(不是很困难)。请看这里。
customize reporting behavior for tests such as showing me timing data per test and summarizing totals at the end
这是在详细模式下默认完成的。也可以用结果导出JUnit XML文件。此外,还可以为所有步骤和类型的输出自定义输出格式。
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | TEST_GROUP(FirstTestGroup) { /* * Test group = test suite * You can implement tear down / setup here too */ }; TEST(FirstTestGroup, FirstTest) { FAIL("Fail me!"); } TEST(FirstTestGroup, SecondTest) { int value = 4; const int expected = 4; CHECK_EQUAL(expected, value); } |
最后,使用起来并不困难:查看手册。
顺便说一句,它包含模拟(cppumock)和集成内存泄漏检测器。
文档:
- 网站
- github
- 手册