2

我有一个 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;
}

静态函数由全局函数调用,但是如何使用谷歌测试来测试这些静态函数?

4

3 回答 3

5

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

#include "test.c"

/* here follow the tests of getData() */

这样做的缺点是所有内容test.c都会再次编译,对构建时间有明显影响。如果这成为问题,您可能会考虑将要测试的静态函数提取到它们自己的源文件中(例如test_p.c,具有_p私有/内部含义)。然后#include "test_p.c"从两者test.c和您的单元测试中。

于 2015-08-19T12:04:26.033 回答
4

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

解决此问题的一种方法是“删除”静态属性以进行测试:

#ifndef GOOGLE_TEST
# define STATIC static
#else
# define STATIC
#endif

STATIC int getData();

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

static int getData(<arglist>);

#ifdef GOOGLE_TEST
int myModule_getData(<arglist>) {return(getData(<arglist>);}
...
#endif
于 2015-08-19T12:44:30.363 回答
-2

函数的static可见性仅限于翻译单元。

AFAIK,对于 googletest,您需要从包含用TEST(). 如果被测函数是static,则无法直接从TEST()MACRO 调用中对其进行测试。

直接的方法是注释掉static函数的修饰符以用于测试目的。

于 2015-08-19T11:57:58.940 回答