web-dev-qa-db-fra.com

Google Test est-il OK pour tester le code C?

J'en suis donc venu à aimer et à utiliser Google Test pour un projet C++ dans lequel je suis impliqué. Je viens de proposer un nouveau projet qui sera directement C (une bibliothèque) et jusqu'à présent, je ne vois aucune raison pour laquelle de ne pas continuer à utiliser Google Test, même si c'est un framework C++. La disponibilité d'un compilateur C++ ne sera pas un problème.

Y a-t-il des raisons spécifiques pour lesquelles je ne devrais pas utiliser Google Test pour tester du code C direct?

Merci.

60
Jason

Il est assez courant de tester du code C en utilisant un framework de test C++, même le premier livre sur le sujet suit cette approche. J'ai beaucoup utilisé googletest dans le passé pour tester le code C unitaire et je peux le recommander.

J'ai écrit un blog à ce sujet qui pourrait être utile: http://meekrosoft.wordpress.com/2009/11/09/unit-testing-c-code-with-the-googletest-framework/

58
mikelong

Comme tout le code C++ de Google, Google Test n'utilise pas d'exceptions, donc le flux de sécurité des exceptions ne sera pas un problème. Tant que vos en-têtes sont compatibles C++ (n'utilisez pas de mots clés C++, exportez les symboles avec une liaison correcte), cela devrait aller.

13
Alex B

Je pensais juste ajouter un autre point: puisque gtest est C++, vous analyserez vos en-têtes C sous test en C++. Cela signifie que les tests ne garantissent pas que les en-têtes sont consommables à partir de C. J'ai récemment rencontré cela avec une bibliothèque C que je construis.

4
Kim Gräsman

Jason, sache ça !!! :RÉ

Comme Meekrosoft l'a dit, oui, c'est possible. J'ai également utilisé son site Web lorsque j'ai essayé de le faire. Cela fonctionne, mais il y a un gros problème:

GTest est un outil orienté objet et le langage C ne l'est pas!

Par exemple, dans GTest, vous avez beaucoup de fonctions (80% de l'API entière) qui demandent un objet comme paramètre, par exemple:

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

depuis le site Web de GTest https://code.google.com/p/googlemock/wiki/ForDummies vous n'utiliserez donc que des macros comme expect_equal, expect_bigger_than et ainsi de suite ...

Je voudrais vous suggérer l'outil CMocka (ou d'autres outils de test d'unité C). Il provient également de google (modifié par un groupe de développeurs non-google) et il est créé directement pour le langage C. J'utilise celui-ci lorsque je veux tester le code source de type C.

J'espère que cela aide .. :-) Bonne journée .. :-)

4
Zdeno Pavlik

Je n'ai pas pu en nommer un. Je suppose qu'il y aura certaines choses que vous n'avez pas en C. "normal". Par exemple, je pense que le TestCase est dérivé d'une certaine classe. Mais dans le test, vous pouvez tester ce que vous voulez et pourquoi pas C?

3
Friedrich