Google Test可以测试C代码吗?

Jas*_*son 62 c googletest

所以我喜欢和喜欢使用Google Test来参与我参与的C++项目.我只是提出一个新的项目,它将是直接的C(一个库),到目前为止看不出任何理由即使它是一个C++框架,也不要继续使用Google Test.拥有C++编译器不会成为问题.

我不应该使用Google Test测试直接C代码的具体原因吗?

谢谢.

mik*_*ong 60

使用C++测试框架测试C代码是很常见的,即使是关于该主题的领先书籍也遵循这种方法.我过去曾广泛使用googletest对C代码进行单元测试并推荐它.

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


Ale*_*x B 13

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


Zde*_*lik 7

杰森,注意这一点!!!: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));
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • EXPECT_CALL 不是在 GoogleTest 中定义的,而是在 GoogleMock(一个模拟框架——不是一个单元测试框架)中定义的。GoogleTest 定义了 EXPECT_EQ 和 EXPECT_TRUE 等宏,它们非常适合单元测试过程(非 OO)代码。我目前正在将它用于一个项目,它工作正常。 (8认同)

Kim*_*man 5

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


Fri*_*ich 2

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