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

时间:2013-03-15 10:19:43

标签: c++ unit-testing linux gcc

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

我想测试共享库的“t”部分中列出的函数的工作。为了测试“T”部分中的功能,我使用了cppunit。

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

库的编程语言是c ++

编译器gcc 4.1.2

平台RedHat / Solaris

2 个答案:

答案 0 :(得分:5)

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

这里采用的可能技巧是:

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

答案 1 :(得分:2)

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

这意味着,将一些公开导出的函数添加到lib中,该函数调用您要测试的内部函数。使用该函数的名称清除这些仅用于测试目的,lib的“普通用户”不应使用它们。将这些方法的文档保持在内部,使外人很难使用它们。向官方文档添加一个明确的警告,例如,所有以前缀“TEST_”开头的方法都不会被普通用户使用,并且每个版本都会随时更改。

如果某人如此无知也无法使用这些方法,只是不在乎 - 你无法阻止这些人射入脚中。