我有一个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 test测试那些静态函数呢?
3条答案
按热度按时间vu8f3i0k1#
我知道要用google test测试一个函数,它必须对测试代码可见。一个静态函数只对当前编译单元可见。
解决这个问题的一种方法是为了测试的目的“移除”static属性:
如果这产生了冲突,例如因为在许多源文件中有一个
getData()
函数,您可以创建简单的容器函数:7rtdyuoh2#
一种实现方法是将C源文件
#include
到测试源中(如果它只使用有效的C++的C子集)。然后,static
函数与测试代码属于同一个翻译单元,并且可以从中调用:这样做的缺点是
test.c
中的所有内容都要重新编译,这对构建时间有明显的影响。如果这是一个问题,你可以考虑将要测试的静态函数提取到它们自己的源文件中(例如test_p.c
,其中_p
意味着私有/内部)。然后从test.c
和你的单元测试中提取#include "test_p.c"
。34gzjxbg3#
static
函数的可见性仅限于转换单元。AFAIK,对于googletest,您需要从包含使用
TEST()
编写的测试代码的单独测试文件中调用被测函数。如果被测函数是static
,则无法直接从TEST()
MACRO调用进行测试。直接的方法是注解掉函数的
static
修饰符,以用于测试目的。