单元测试DLL中的非导出类

Jon*_*Jon 29 c++ unit-testing boost-test visual-studio

我们使用Visual Studio 2008开发C++应用程序,并使用Boost.Test进行单元测试.目前,我们有一个单独的解决方案,其中包含我们的单元测试.

我们在核心解决方案中的许多项目都会产生DLL.我们的测试覆盖范围有限,因为我们无法测试非导出类.

我有两个关于如何测试它们的想法:

  1. 出口一切
  2. 将测试放在DLL(相同的项目和解决方案)中,并使用Boost.Test的外部运行器

我不完全确定会有什么缺点.上面的数字1打破了模块级封装,数字2可能导致更大的DLL,除非可能只在某些配置中包含测试代码.

那么,上述方法有任何严重的缺点,还是你能想到其他解决方案?

Rai*_*Rai 15

扩展Tom Quarendon对这个问题的回答,我使用了Simon Steele的一个轻微变体:

  • 创建一个测试项目(使用你喜欢的任何测试框架,我使用CppUnit).
  • 在你的test_case.cpp中#include <header/in/source/project.h>.
  • 在测试项目属性中:
    • 在Linker-> General中,将源项目添加$(IntDir)到Additional Library Directories.
    • 在Linker-> Input中,将.obj文件添加到Additional Dependencies.
  • 将测试项目中的依赖项添加到Project-> Project Dependencies中的源项目.

同样,唯一的维护开销是单元测试的标准开销 - 创建对要测试的单元的依赖性.

  • 关于此方法的另一个细节:如果您测试的DLL使用预编译的头文件,则链接以生成受测试的DLL的所有.obj文件都取决于受测试的DLL中的预编译头文件.构建Test项目时,会导致链接器错误LNK2011:未链接的预编译对象; 图像可能无法运行.除了要测试的特定目标文件之外,还必须添加stdafx.obj(如果您的PCH文件是通过编译stdafx.cpp生成的). (3认同)