共享库的私有函数的单元测试

Unit testing for private functions of a shared library

本文关键字:函数 单元测试 共享      更新时间:2023-10-16

我在想是否有任何框架/库提供一种机制来测试共享库没有导出的函数。

我想测试在共享库的"t"部分列出的函数的工作。为了测试"T"节中的函数,我使用了cppunit.

测试场景:有一个使用"__属性__ ((visibility("default"))))"导出的类,它声明了另一个类的变量,该变量具有在同一库中定义的"__属性__ ((visibility("hidden")))"。我想用"__属性__ ((visibility("hidden")))"属性来测试这个类。

库的编程语言为c++

编译GCC 4.1.2

平台RedHat/Solaris

由于单元测试应该对他们测试的代码有深入的了解,单元测试也可以使用代码段的普通用户无法使用的技巧。

可以使用的技巧有:

  • 确保单元测试和待测代码被链接为单个可执行文件,而不必先在库中构建待测代码。
  • 使用预处理器宏在为单元测试构建时禁用可见性属性。

如果您想使用您所提供的相同二进制文件测试这些函数,我知道只有一个实用的解决方案:在库中构建某种维护舱口

这意味着,将一些公开导出的函数添加到库中,这些函数调用您想要测试的内部函数。使用函数的名称,明确这些函数仅用于测试目的,它们不应该被库的"普通用户"使用。将这些方法的文档保留在内部,以使外部人员很难使用它们。在官方文档中添加一个明确的警告,例如,所有以前缀"TEST_"开头的方法都不能被普通用户使用,并且在每个版本中都可能发生变化。

如果有人如此无知地使用这些方法,那就别管了——你无法阻止这样的人搬起石头砸自己的脚。