Google Test是否可以测试C代码?


72

因此,我开始喜欢并喜欢对参与的C ++项目使用Google Test。我只是提出了一个新的项目,该项目将是纯C语言(一个库),到目前为止还看不到任何原因即使是C ++框架,也不要继续使用Google Test。拥有C ++编译器将不是问题。

是否有特定原因导致我不应该使用Google Test测试直接的C代码?

谢谢。


1
我知道您为什么要这么做,gtest非常精简。好问题。
马特·乔纳

Answers:



14

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


添加到不兼容的东西列表中:在C标头中对<stdatomic.h>的任何使用。 gcc.gnu.org/bugzilla/show_bug.cgi?id=60932
约拿

5

杰森,请注意!!!:D

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

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

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

来自GTest网站https://code.google.com/p/googlemock/wiki/ForDummies, 因此您将仅使用宏,例如Expect_equal,expect_bigger_than等。

我想建议您使用CMocka工具(或其他一些C单元测试工具)。它也来自Google(由非Google开发人员小组修改),并且直接针对C语言创建。当我想测试C型源代码时,我使用了这一代码。

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


8
EXPECT_CALL不是在GoogleTest中定义,而是在GoogleMock(模拟框架-而非单元测试框架)中定义。GoogleTest定义了EXPECT_EQ和EXPECT_TRUE之类的宏,非常适合单元测试过程(非OO)代码。我目前正在将其用于项目,并且效果很好。
weberc2

4

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


3

我不能说一个。我想在“正常” CEg中会有一些您没有的东西,我认为TestCase源自某个类。但是在测试中,您可以测试任何您喜欢的东西,那么为什么不使用C?

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.