如何使用 google test 测试 C 的静态函数
how to test static functions of C using google test
我有一个 C 文件包含一些静态函数,如何使用 google 测试来测试这些静态函数?
头文件:
test.h
int accessData();
源文件:
test.c
static int value;
static int getData()
{
return value;
}
int accessData()
{
if(value != 0)
{
return getData();
}
return 0;
}
静态函数被全局函数调用,但是如何使用google测试来测试那些静态函数?
static
函数的可见性仅限于翻译单元。
AFAIK,对于 googletest,您需要从包含用 TEST()
编写的测试代码的单独测试文件中调用被测函数。如果被测函数是 static
,那么直接从 TEST()
MACRO 调用中测试它是不可能的。
直接的方法是,注释掉函数的 static
修饰符以进行测试。
实现此目的的一种方法是将 C 源文件 #include
放入您的测试源中。然后,static
函数是与测试代码相同的翻译单元的一部分,可以从中调用:
#include "test.c"
/* here follow the tests of getData() */
这样做的缺点是 test.c
中的所有内容都会再次编译,这对构建时间有明显的影响。如果这成为一个问题,您可以考虑将要测试的静态函数提取到它们自己的源文件中(例如 test_p.c
,其中 _p
表示 private/internal)。然后 #include "test_p.c"
来自 test.c
和你的单元测试。
我明白要用 google 测试来测试一个函数,它必须对测试代码可见。静态函数只对当前编译单元可见。
解决此问题的一种方法是 "remove" 用于测试目的的静态属性:
#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
我有一个 C 文件包含一些静态函数,如何使用 google 测试来测试这些静态函数?
头文件:
test.h
int accessData();
源文件:
test.c
static int value;
static int getData()
{
return value;
}
int accessData()
{
if(value != 0)
{
return getData();
}
return 0;
}
静态函数被全局函数调用,但是如何使用google测试来测试那些静态函数?
static
函数的可见性仅限于翻译单元。
AFAIK,对于 googletest,您需要从包含用 TEST()
编写的测试代码的单独测试文件中调用被测函数。如果被测函数是 static
,那么直接从 TEST()
MACRO 调用中测试它是不可能的。
直接的方法是,注释掉函数的 static
修饰符以进行测试。
实现此目的的一种方法是将 C 源文件 #include
放入您的测试源中。然后,static
函数是与测试代码相同的翻译单元的一部分,可以从中调用:
#include "test.c"
/* here follow the tests of getData() */
这样做的缺点是 test.c
中的所有内容都会再次编译,这对构建时间有明显的影响。如果这成为一个问题,您可以考虑将要测试的静态函数提取到它们自己的源文件中(例如 test_p.c
,其中 _p
表示 private/internal)。然后 #include "test_p.c"
来自 test.c
和你的单元测试。
我明白要用 google 测试来测试一个函数,它必须对测试代码可见。静态函数只对当前编译单元可见。
解决此问题的一种方法是 "remove" 用于测试目的的静态属性:
#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