【问题标题】:Is Google Test OK for testing C code?Google Test 可以测试 C 代码吗?
【发布时间】:2011-03-17 05:33:48
【问题描述】:

所以我开始喜欢并喜欢在我参与的 C++ 项目中使用 Google Test。我只是提出了一个新项目,它将是纯 C(一个库),到目前为止还看不到任何不继续使用 Google Test 的理由,即使它是一个 C++ 框架。拥有可用的 C++ 编译器将不是问题。

我不应该使用 Google Test 来测试纯 C 代码是否有具体原因?

谢谢。

【问题讨论】:

  • 我能理解您为什么要这样做,gtest 非常简洁。好问题。

标签: c googletest


【解决方案1】:

使用 C++ 测试框架测试 C 代码是很常见的,即使 the leading book on the subject 也遵循这种方法。我过去广泛使用 googletest 对 C 代码进行单元测试,并且可以推荐它。

我写了一篇可能有用的博客文章: http://meekrosoft.wordpress.com/2009/11/09/unit-testing-c-code-with-the-googletest-framework/

【讨论】:

    【解决方案2】:

    我只是想补充一点:由于 gtest 是 C++,因此您将被测试的 C 标头解析为 C++。这意味着测试不能保证标头可以从 C 中使用。我最近在我正在构建的 C 库中遇到了这个问题。

    【讨论】:

      【解决方案3】:

      与所有 Google 的 C++ 代码一样,Google Test 不使用异常,因此异常安全流程不会成为问题。只要您的标头与 C++ 兼容(不使用 C++ 关键字,导出具有正确链接的符号),就可以了。

      【讨论】:

      【解决方案4】:

      杰森, 请注意这一点! :D

      正如 Meekrosoft 所说,是的,这是可能的。当我尝试这样做时,我也使用了他的网站。它有效,但有一个大问题:

      GTest 是面向对象的工具,而 C 语言不是!

      例如,在 GTest 中,您有很多函数(整个 API 的 80%)请求对象作为参数,例如:

      EXPECT_CALL(turtle, PenDown())              // turtle is object(class) and PenDown() is method of that object
            .Times(AtLeast(1));
      

      来自 GTest 网站https://code.google.com/p/googlemock/wiki/ForDummies 所以你将只使用expect_equal、expect_bigger_than等宏......

      我想向您推荐工具CMocka(或其他一些C 单元测试工具)。它也来自谷歌(由非谷歌开发人员组修改),它是直接为 C 语言创建的。当我想测试 C 类型的源代码时,我会使用这个。

      我希望这会有所帮助.. :-) 祝你有美好的一天.. :-)

      【讨论】:

      • EXPECT_CALL 没有在 GoogleTest 中定义,而是在 GoogleMock(一个模拟框架——不是单元测试框架)中定义。 GoogleTest 定义了诸如 EXPECT_EQ 和 EXPECT_TRUE 之类的宏,它们非常适合对过程(非 OO)代码进行单元测试。我目前正在将它用于一个项目,并且效果很好。
      【解决方案5】:

      我无法说出一个。我想会有一些你在“正常”C 中没有的东西。例如,我认为 TestCase 是从某个类派生的。但是在测试中你可以测试任何你喜欢的东西,那为什么不 C 呢?

      【讨论】:

        猜你喜欢
        • 2018-04-30
        • 1970-01-01
        • 1970-01-01
        • 2019-08-25
        • 1970-01-01
        • 2018-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多