头文件:
test.h
int accessData();
源文件:
test.c
static int value;
static int getData()
{
return value;
}
int accessData()
{
if(value != 0)
{
return getData();
}
return 0;
}
静态函数是由全局函数调用的,但如何使用google test测试那些静态函数?
答案 0 :(得分:2)
实现此目的的一种方法是将{C}源文件#include
放入测试源。然后,static
函数是与测试代码相同的翻译单元的一部分,可以从中调用:
#include "test.c"
/* here follow the tests of getData() */
这样做的缺点是test.c
中的所有内容都会再次编译,对构建时间有明显影响。如果这成为一个问题,您可以考虑将要测试的静态函数提取到他们自己的源文件中(例如test_p.c
,其中_p
表示私有/内部)。然后#include "test_p.c"
来自test.c
和您的单元测试。
答案 1 :(得分:1)
我知道要使用google test测试一个函数,它必须对测试代码可见。静态函数仅对当前编译单元可见。
解决这个问题的一种方法是"删除"用于测试目的的静态属性:
#ifndef GOOGLE_TEST
# define STATIC static
#else
# define STATIC
#endif
STATIC int getData();
如果这会产生冲突,例如因为许多源文件中有航空getData()
函数,您可以创建简单的容器函数:
static int getData(<arglist>);
#ifdef GOOGLE_TEST
int myModule_getData(<arglist>) {return(getData(<arglist>);}
...
#endif
答案 2 :(得分:-1)
static
功能使其可见性仅限于翻译单元。
AFAIK,对于googletest,您需要从单独的测试文件调用测试中的函数,该文件包含用TEST()
编写的测试代码。如果被测函数是static
,则无法直接从TEST()
MACRO调用中测试它。
直接的方法是,为测试目的注释掉static
修饰符。