GoogleTest与CppUnit:事实


70

在接下来的几年中设置C ++单元测试框架的过程中,我们选择了GoogleTestCppUnit。我对两者都有一定的经验,我的首选是GoogleTest。无论如何说服我的老板我需要一些事实,所以我在互联网上做了一些阅读,包括手册,维基页面和一些资源。我想出了GoogleTest优势和一个CppUnit优势(图形测试运行程序)的列表。在这里,它们按感知的有用性排序:

  • INSTANTIATE_TEST_CASE_P用您想要的任何参数集(包括笛卡尔乘积)实例化测试用例
  • FRIEND_TEST,用于测试私有类成员(适用于所有旧版代码)
  • 将断言变成断点
  • 非致命断言
  • “开箱即用” googlemock集成
  • 自动测试检测,无需枚举
  • 可以禁用和启用测试
  • 可以使用名称模式选择要运行的测试
  • 值/类型参数化测试
  • 用户定义的谓词断言
  • 死亡测试
  • 更加丰富的断言
  • 类型断言
  • 在子程序上断言
  • 可以使用<<将其他调试信息添加到断言中
  • RecordProperty向XML输出发出属性的最后一个值
  • SCOPED_TRACE帮助理解断言失败的上下文,该断言来自子例程或循环内部。
  • Jenkins可以立即显示xUnit XML输出,而无需在两者之间进行XSLT转换
  • 支持自定义类型的打印机
  • 测试指示所消耗的时间(我怀疑这对于CppUnit也可行,但我还没有弄清楚)
  • 测试事件侦听器API(用户定义的插件)
  • 测试改组
  • 没有例外,RTTI

我假设CppUnit不支持以上所有内容是否正确?是否有一个有用的功能GoogleTest无法在CppUnit的我失踪?

最后但并非最不重要的一点:GoogleTest是否缺少任何出色的CppUnit功能?

谢谢!


5
比较c ++单元测试框架的一些答案专门针对GoogleTest功能。
Greg Hewgill 2011年

2
几年前,我进行了类似的调查,当时还没有GoogleTest。我选择了CXXTest,它具有通过Perl的预解析步骤枚举测试用例的机制。那远远优于CppTest。也就是说,我对GoogleTest一无所知。
Wolfram Arnold

1
图形测试跑步者是一个优势吗?通常,您希望可以轻松实现自动化,因为自动化意味着您可以更轻松,更频繁地获得测试反馈。
Ben Voigt

Answers:


7

如果您使用旧版的gcc编译器,或者被测代码在vxWorks(或VxSim)上运行,则使用cppUnit的机会可能会比Googletest框架的机会大。

另一方面,googletest框架的另一个功能是提供3种不同级别的设置/拆卸功能:

  • 每个程序
  • 每个测试用例(或测试组)
  • 每个测试实例

不确定cppUnit是否支持此功能,但这可能非常方便,尤其是对于旧系统。

另外,还有一个用于Eclipse CDT的googletest插件。


6

如果您还没有看过xUnit ++,那么我之所以专门这样做是因为我对可用的功能(包括gtest)不满意。支持您的大多数列表,如果不支持,那么如果它是“必须具备”的功能,我可能会愿意添加。


您可以在开放源代码许可下发布它吗?像Apache 2.0还是MIT许可证?
萨钦·约瑟夫

老实说,我不记得正在使用哪个许可证,但是我认为它是MIT许可证。
moswald

非常感谢,但是尽管文本相同,但License.txt并没有说它是MIT许可证。如果可以的话,您是否愿意添加它(当然,如果有时间)?像这样的opensource.org/licenses/MIT?我认为它将允许更多的人使用并尝试这个出色的框架:-)
Sachin Joseph

1
Wikipedia页面en.wikipedia.org/wiki/List_of_unit_testing_frameworks也没有说xUnit ++是根据MIT许可证发行的,可能是因为您的Bitbucket存储库中未指定任何位置(我认为):-)
Sachin Joseph

死链接?smb得到了github上传?
图片

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.