如何使用谷歌测试测试C的静态function

我有一个C文件包含一些静态函数,如何使用google test来测试那些静态函数?

头文件:

test.h int accessData(); 

源文件:

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

静态函数是由全局函数调用的,但如何使用google测试来测试那些静态函数?

实现此目的的一种方法是将C源文件#include到您的测试源中。 然后, static函数是与测试代码相同的转换单元的一部分,并且可以从它调用:

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

这样做的缺点是test.c中的所有内容都会再次编译,对构建时间有明显影响。 如果这成为一个问题,您可以考虑将要测试的静态函数提取到他们自己的源文件中(例如test_p.c ,其中_p表示私有/内部)。 然后从test.c和你的unit testing#include "test_p.c"

我知道要使用google test测试一个函数,它必须对测试代码可见。 静态函数仅对当前编译单元可见。

解决此问题的方法是“删除”静态属性以用于测试目的:

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

如果这会产生冲突,例如因为在许多源文件中有getData()函数,您可以创建简单的容器函数:

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

staticfunction使其可见性仅限于翻译单元。

AFAIK,对于googletest,您需要从一个单独的测试文件中调用被测试的函数,该文件包含用TEST()编写的测试代码。 如果被测函数是static ,则无法直接从TEST() MACRO调用中测试它。

直接的方法是,为测试目的注释掉函数的static修饰符。