comment tester les fonctions statiques de C en utilisant google test

J’ai un fichier C contenant des fonctions statiques, comment utiliser google test pour tester ces fonctions statiques?

header de fichier:

test.h int accessData(); 

fichier source:

 test.c static int value; static int getData() { return value; } int accessData() { if(value != 0) { return getData(); } return 0; } 

La fonction statique est appelée par la fonction globale, mais comment tester ces fonctions statiques avec google test?

Pour cela, vous pouvez #include le fichier source C dans votre source de test. Ensuite, la fonction static fait partie de la même unité de traduction que le code de test et peut être appelée à partir de celle-ci:

 #include "test.c" /* here follow the tests of getData() */ 

L’inconvénient est que tout dans test.c est compilé à nouveau, ce qui a un impact évident sur les temps de construction. Si cela pose problème, vous pouvez envisager d’extraire les fonctions statiques à tester dans leur propre fichier source (par exemple, test_p.c , avec le _p signifiant privé / interne). Puis #include "test_p.c" de test.c et de votre test unitaire.

Je comprends que pour tester une fonction avec google test, elle doit être visible pour le code de test. Une fonction statique n’est visible que par l’unité de compilation actuelle.

Une façon de contourner ce problème consiste à “supprimer” l’atsortingbut statique à des fins de test:

 #ifndef GOOGLE_TEST # define STATIC static #else # define STATIC #endif STATIC int getData(); 

Si cela donne des conflits, par exemple parce qu’il y a des fonctions getData() dans de nombreux fichiers sources, vous pouvez créer des fonctions de conteneur simples:

 static int getData(); #ifdef GOOGLE_TEST int myModule_getData() {return(getData();} ... #endif 

Une fonction static a une visibilité limitée à l’unité de traduction.

Si je comprends bien, pour googletest, vous devez appeler la ou les fonctions testées à partir d’un fichier test séparé contenant le code de test écrit avec TEST() . Si la fonction testée est static , il n’est tout simplement pas possible de le tester directement à partir de l’appel TEST() MACRO.

L’approche directe consiste à commenter le modificateur static de la fonction à des fins de test.