如何使用google test测试C的静态函数

rat*_*zip 2 c googletest static-functions

我有一个包含一些静态函数的 C 文件,如何使用 google test 来测试那些静态函数?

头文件:

test.h
int accessData();
Run Code Online (Sandbox Code Playgroud)

源文件:

test.c
static int value;
static int getData()
{
   return value;
}

int accessData()
{
    if(value != 0)
    {
       return getData();
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*vie 6

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

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

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

STATIC int getData();
Run Code Online (Sandbox Code Playgroud)

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

static int getData(<arglist>);

#ifdef GOOGLE_TEST
int myModule_getData(<arglist>) {return(getData(<arglist>);}
...
#endif
Run Code Online (Sandbox Code Playgroud)


Tob*_*ght 5

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

#include "test.c"

/* here follow the tests of getData() */
Run Code Online (Sandbox Code Playgroud)

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