Is Google Test OK for testing C code?

CGoogletest

C Problem Overview


So I've come to like and enjoy using Google Test for a C++ project I'm involved in. I'm just bringing up a new project that will be straight C (a library) and so far can't see any reason why not to continuing using Google Test, even though its a C++ framework. Having a C++ compiler available will not be an issue.

Are there are specific reasons why I shouldn't use Google Test for testing straight C code?

Thanks.

C Solutions


Solution 1 - C

It is pretty common to test C code using a C++ testing frameworks, even [the leading book on the subject][1] follows this approach. I have used googletest extensively in the past to unit test C code and can recommend it.

I have written a blog post about it that might be useful: http://meekrosoft.wordpress.com/2009/11/09/unit-testing-c-code-with-the-googletest-framework/

[1]: http://pragprog.com/titles/jgade/test-driven-development-for-embedded-c "testing"

Solution 2 - C

As all Google's C++ code, Google Test does not use exceptions, so exception safety flow won't be an issue. As long as your headers are C++-compatible (not using C++ keywords, export symbols with correct linkage), it should be fine.

Solution 3 - C

Jason, be aware of that!!! :D

As Meekrosoft said, yes, it is possible. I also used his website when I tried to do that. It works, but there is one big problem:

GTest is objected oriented tool and C language isn't!

In example, in GTest you have a lot of functions (80% of whole API) that request object as parameter, for example:

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

from GTest website https://code.google.com/p/googlemock/wiki/ForDummies so you will use only macros like expect_equal, expect_bigger_than and so on...

I would like to suggest you tool CMocka (or some other C unit testing tools). It is also from google (modified by group of non-google developers) and it is created directly for C language. I use this one when I want to test C-type source code.

I hope this helps.. :-) Have a nice day.. :-)

Solution 4 - C

I just thought I'd add another point: since gtest is C++, you'll be parsing your C headers under test as C++. This means the tests don't guarantee that the headers are consumable from C. I recently ran into this with a C library I'm building.

Solution 5 - C

I could not name one. I guess there will be some things which you don't have in "normal" C. E.g I think the TestCase are derived from a certain class. But within the test you can test whatever you like and so why not C?

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJasonView Question on Stackoverflow
Solution 1 - CmikelongView Answer on Stackoverflow
Solution 2 - CAlex BView Answer on Stackoverflow
Solution 3 - CZdeno PavlikView Answer on Stackoverflow
Solution 4 - CKim GräsmanView Answer on Stackoverflow
Solution 5 - CFriedrichView Answer on Stackoverflow