如何使用谷歌测试测试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
static
function使其可见性仅限于翻译单元。
AFAIK,对于googletest,您需要从一个单独的测试文件中调用被测试的函数,该文件包含用TEST()
编写的测试代码。 如果被测函数是static
,则无法直接从TEST()
MACRO调用中测试它。
直接的方法是,为测试目的注释掉函数的static
修饰符。