GoogleTest vs CppUnit:事实

Posted

技术标签:

【中文标题】GoogleTest vs CppUnit:事实【英文标题】:GoogleTest vs CppUnit: The facts 【发布时间】:2011-12-16 20:41:22 【问题描述】:

在为未来几年设置 C++ 单元测试框架的过程中,我们入围了 GoogleTestCppUnit。我对这两者都有一些经验,我最喜欢的是 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 功能?

谢谢!

【问题讨论】:

Comparison of c++ unit test frameworks 的一些答案专门针对 GoogleTest 功能。 几年前我在做一个类似的调查,当时还没有 GoogleTest。我选择了 CXXTest,它有一种机制,可以通过 Perl 的预解析步骤来枚举测试用例。这大大优于 CppTest。也就是说,我对 GoogleTest 一无所知。 图形测试运行器有优势吗?通常,您想要一些可以轻松自动化的东西,因为自动化意味着您可以更轻松、更频繁地获得测试反馈。 【参考方案1】:

如果您还没有查看过xUnit++,我特意制作了它,因为我对可用的内容(包括 gtest)不满意。支持您的大部分列表,如果不支持,如果它是“必备”功能,我可能愿意添加它。

【讨论】:

你能在宽松的开源许可下发布它吗?喜欢 Apache 2.0 还是 MIT 许可证? 老实说,我不记得使用的是哪个许可证,但我认为它是 MIT 许可证。 非常感谢,虽然文字相同,但 License.txt 并没有说它是 MIT License。如果可以的话,你介意添加它吗(当然,当你有时间的时候)?喜欢这个opensource.org/licenses/MIT?我认为它会让更多人使用和尝试这个美妙的框架:-) ***页面en.wikipedia.org/wiki/List_of_unit_testing_frameworks 也没有说 xUnit++ 是在 MIT 许可证下发布的,可能是因为它没有在您的 bitbucket 存储库中的任何地方指定(我认为):-) 死链接? smb 有 github 上传吗?【参考方案2】:

这些是我看到的好处。有几个 GUI 测试运行器:

    https://github.com/ospector/gtest-gbar https://github.com/SandyChapman/gtest-runner-qt

我使用了第一个,虽然它正在开发中并且需要一些工作,但它运行良好。不知道有没有其他选择。

【讨论】:

【参考方案3】:

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

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

每个程序 每个测试用例(或测试组) 每个单独的测试实例

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

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

【讨论】:

以上是关于GoogleTest vs CppUnit:事实的主要内容,如果未能解决你的问题,请参考以下文章

单元测试 CLI/MFC 应用程序

如何使用 Visual Studio 2012 构建 cppunit

由于其他依赖库,在 VS2010 中链接 googleTest 会导致 LNK2005

自动化测试工具

自动化测试

自动化测试