【发布时间】:2011-07-26 16:44:19
【问题描述】:
我们使用 Visual Studio 2008 开发 C++ 应用程序,并使用 Boost.Test 进行单元测试。目前,我们有一个单独的解决方案,其中包含我们的单元测试。
我们在核心解决方案中的许多项目都会生成 DLL。我们的测试覆盖率有限,因为我们无法测试非导出的类。
我对如何测试这些有两个想法:
- 导出所有内容
- 将测试放在 DLL 中(相同的项目和解决方案)并使用 Boost.Test 的外部运行器
我不完全确定缺点是什么。上面的数字 1 破坏了模块级别的封装,而数字 2 可能会导致更大的 DLL,除非可以仅在某些配置中包含测试代码。
那么,上述方法有什么严重的缺陷,或者你能想到其他的解决方案吗?
【问题讨论】:
-
我想暗示CMake 提供了一个名为“对象库”的功能。 (
add_library( foo_obj OBJECT ... )) 在我的项目中,我将源代码构建到对象库中,然后将其链接到 both DLL (add_library( foo SHARED ... $<TARGET_OBJECTS:foo_obj> )) 和 它的测试驱动程序 (@987654324 @)。这是下面使用不同构建系统的答案的变体(这就是为什么我将其添加为评论,而不是答案),但它解决了同样的问题。
标签: c++ visual-studio unit-testing boost-test