使用CppUnit测试静态函数

MOH*_*MED 9 c c++ unit-testing cppunit

我的项目包含C文件.在某些文件中,我将函数定义为static.

我在单元测试中使用CppUnit,我想测试这些静态函数.我知道不允许从文件外部(它定义的地方)调用函数.有没有解决方案来避免这个问题,以便从我的C++测试文件中调用这些静态函数?

Wil*_*ill 6

假设我们正在谈论C静态函数,那么最简单的解决方案是在编译调试版本时使函数非静态.这意味着符号可供您在单元测试中使用.这仅在没有符号别名的情况下有效.

如果DEBUG在所有调试版本上定义符号,则类似于:

#ifdef DEBUG
#define debug_export 
#else
#define debug_export static
#endif
Run Code Online (Sandbox Code Playgroud)

然后定义这样的静态函数

debug_export void foo(void)
{
...
}
Run Code Online (Sandbox Code Playgroud)

并在头文件中有条件地包含声明或在单元测试文件中手动导入它们:

extern void foo(void);
Run Code Online (Sandbox Code Playgroud)

围绕它的其他方法是在源文件本身中包含单元测试(如果它失控,有点混乱),不打扰单元测试功能(一点副作用)或标记功能作为dll-local而不是static,并确保您的单元测试是该动态对象的一部分.