使用CppUnit测试静态函数

时间:2013-04-16 16:16:33

标签: c++ c unit-testing cppunit

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

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

3 个答案:

答案 0 :(得分:6)

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

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

#ifdef DEBUG
#define debug_export 
#else
#define debug_export static
#endif

然后定义像这样的静态函数

debug_export void foo(void)
{
...
}

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

extern void foo(void);

围绕它的其他方法是在源文件本身中包含单元测试(如果它失控,有点乱),不要打扰单元测试功能(一点点警察)或者标记函数as dll-local而不是静态,并确保您的单元测试是该动态对象的一部分。

答案 1 :(得分:4)

我有一个公共头文件,我包含在项目的所有源文件中。我添加了这些行,问题解决了:

#ifdef TEST
#define static
#endif

我甚至可以避免在我的原始C代码中添加上述代码。我可以在gcc命令中添加标志-Dstatic=,我发现它也可以。

但是在使用此解决方案时我们必须小心,因为:

  • 我们可以在2个单独的文件中将相同的变量/函数名称定义为static。
  • 我们可以有一个函数,其中包含一个定义为static的变量。

答案 2 :(得分:1)

有没有办法重构代码以消除对静态方法的需求?从OO设计的角度来看,静力学是羊皮的全球化。

我知道这不一定是实用或最快的答案,但你会通过消除它来改进你的设计。