在为未来几年设置 C++ 单元测试框架的过程中,我们将 GoogleTest 和 CppUnit 列入了候选名单。我对这两者都有一些经验,我最喜欢的是 GoogleTest。无论如何,为了说服我的老板,我需要一些 事实,所以我在 Internet 上进行了一些阅读,包括手册、wiki 页面和一些资源。我提出了一份 GoogleTest 优势列表和一个 CppUnit 优势(图形测试运行器)。在这里,它们按 感知 有用性排序:
- INSTANTIATE_TEST_CASE_P 使用您想要的任何参数集实例化测试用例,包括笛卡尔积
- FRIEND_TEST 用于测试私有类成员(适用于所有遗留代码)
- 将断言变成断点
- 非致命断言
- “开箱即用” googlemock 集成
- 自动测试检测,无需枚举
- 可以禁用和启用测试
- 可以使用名称模式选择要运行的测试
- 值/类型参数化测试
- 用户定义的谓词断言
- 死亡测试
- 更丰富的断言集
- 类型断言
- 断言子程序
- 可以使用 << 将额外的调试信息添加到断言中
- RecordProperty 将属性的最后一个值发送到 XML 输出
- SCOPED_TRACE 有助于理解来自子例程或循环内部的断言失败的上下文。
- xUnit XML 输出,可以由 Jenkins 立即显示,而无需在两者之间进行 XSLT 转换
- 支持自定义类型打印机
- 测试指示所消耗的时间(我怀疑这也可以使用 CppUnit,但我还没有弄清楚)
- 测试事件监听 API(用户自定义插件)
- 测试改组
- 没有例外和 RTTI
我是否正确假设 CppUnit 不支持以上所有内容?我缺少的 CppUnit 中是否有一个有用的 GoogleTest 功能 不可用?
最后但并非最不重要的一点是:GoogleTest 是否 缺少 任何不错的 CppUnit 功能?
谢谢!
原文由 EstuansInterius 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您使用旧版本的 gcc 编译器,或者如果您的测试代码在 vxWorks(或 VxSim)上运行,您可能比 Googletest 框架更有机会使用 cppUnit。
另一方面,googletest 框架的另一个特性是 3 种不同级别的设置/拆卸的可用性:
不确定 cppUnit 是否支持这一点,但这可能非常方便,尤其是在遗留系统中。
此外,还有一个用于 Eclipse CDT 的 googletest 插件。