2

编辑:这个问题可能因为“不是一个真正的编程问题”而被投票关闭。对此,我只能反驳“啊!” 现在我确实发现了这个直接相关并且应该有所帮助的问题。

我正在有条不紊地升级我的源代码以使用 C++11 次,我的许多代码与之交互的部分之一是 UnitTest++。

我将每个实现文件的后半部分都专门cpp用于单元测试,因此它们包括许多

TEST(testname) {
  // test code
}

声明。

现在,UnitTest++ 已经有 8 年的历史了,它仍然编译得很好,所以我没有迫切需要更换它。但是我发现它可能不再被维护(尽管它现有的功能看起来确实足够可靠,这是一个不好的迹象),因为网站和 sourceforge 已经关闭。

因此,即使我的代码现在可以正常工作,但现在早点而不是晚点切换到更好的系统可能对我有利,因为它将减少将来的翻译负担。

我环顾四周,似乎有一些可供我选择的选择。特别有趣的是libunittestCATCH之类的,它只是标头。

我的问题是对于过去可能有过 UnitTest++ 和其他单元测试系统经验的人,什么对你有用,如果你有任何建议。我正在寻找一种非常可移植的东西,除了 C++98/03 或 C++11 编译器(gcc、clang、msvc)和标准库之外,它的外部依赖性为零,而且只有标头是一个优点但不是必需的。

所以我想我的偏好确实倾向于缩小选择范围。即使使用 UnitTest++,我也喜欢它的可移植性和自包含性,但我必须编写大约 100 行左右的代码来扩展它,以便以两种方式对我来说更灵活:

  • 允许我指定要运行的特定测试(无论是按名称选择测试,还是按实现它们的源文件或测试套件名称)
  • 自定义测试的报告行为,例如向我显示每个测试的计时数据并在最后汇总总计 - 我实际上对此功能和行为有些不满意,例如我不知道如何配置 UnitTest++ 以应用我的详细测试报告者运行未放置在测试套件中的测试。

一个完美的答案将是来自 UnitTest++ 本身背后的人之一!但是那篇文章已经有10年了!

4

2 回答 2

2

您可能会发现Google Test很有用。它支持 UnitTest++ 所做的一切以及更多功能,并且仍然得到维护(并且经常在 Google 中使用)。此外,它有一个相应的模拟库,Google Mock用于创建模拟,这对于创建模拟实现非常有用。

于 2014-12-30T08:27:02.910 回答
0

我还有两个:

两者都在积极发展


CppUTTest

它非常便携 [...]
[...] 超越了 C++98/03 或 C++11 编译器(gcc、clang、msvc)和标准库

CppUTest 可以与各种编译器和平台一起使用——它也用于嵌入式系统。此外 at 有一个内置的C 接口

并且外部依赖项为零

不多说:下载/结帐并构建,完成。

并且只有标题是一个加号但不是必需的。

不幸的是,这对于 CppUtest 是不可能的,它需要它的 testlibrary 进行链接。

允许我指定要运行的特定测试

可能并且在手册中也有解释(不是很困难)。见这里

自定义测试的报告行为,例如向我显示每个测试的计时数据并在最后汇总总计

这是在详细模式下默认完成的。也可以导出 JUnit Xml 文件和结果。此外,您可以自定义所有步骤和输出类型的输出格式。


示例代码:

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)和集成的内存泄漏检测器。


文档:

于 2015-01-14T19:54:34.570 回答