【发布时间】:2017-04-12 08:40:11
【问题描述】:
这是我的简化文件夹结构:
+ production
+-- ClassToTest.cpp (contains '#includes "DragonHeader.h"')
+-- ClassToTest.h
+-- DragonHeader.h (has a lot of dependencies, ClassToTest only need one simple static function with no dependencies at all.)
+ tests
+-- tst_ClassToTest.cpp
+-- DragonHeader.h (which defines and implements the needed simple function)
所以对于测试用例,我希望测试/DragonHeader.h 会影响生产/DragonHeader.h。 => ClassToTest.cpp 包括测试/DragonHeader.h。怎样才能做到这一点? (如果相关,我正在使用 MSVC 2015...)
测试文件夹中的 CMakeLists.txt 看起来像
project( tst_ClassToTest )
set( ${PROJECT_NAME}_SOURCES tst_ClassToTest.cpp DragonHeader.h ../production/ClassToTest.cpp )
# How to force ClassToTest.cpp to use DragonHeader.h, not production/DragonHeader.h?
add_executable( ${PROJECT_NAME} WIN32 ${${PROJECT_NAME}_SOURCES} )
谢谢!
免责声明:我寻求一种不需要我接触 ClassToTest.cpp 或接触生产中的代码(包括相关的 CMakeLists.txt 文件)的解决方案。然而,一种解决方案是使用 CMake 将 ClassToTest.cpp/h 复制到测试文件夹中,但我认为它不是最佳的。
【问题讨论】:
-
DragonHeader.h 是否需要您不想在测试项目中重新指定的其他库?如果这是真的,请尝试使主项目成为一个带有链接它的小型可执行文件的库。然后测试也可以链接库。 CMake 使这变得非常简单,因为可执行文件从库中获取包含目录等,因此您只需提及一次。
-
这个问题我也有些不清楚,你能补充一些关于你所面临问题的更多细节吗?
-
我的问题的前提是我不能触及“生产”中的任何文件,也不能改变整个构建过程(这就是约瑟夫提出的)。我知道此时它有点理论化,但这就是我所追求的:如何防止 cpp 文件在其旁边获取头文件。相反,我想将另一个标题(具有相同的名称,但位置不同)“放入”cpp 文件中。在写作时,我意识到我想将 cpp 文件的 inlcude 目录顺序从“.tests”更改为“tests”。 (注意“。”)。
标签: c++ unit-testing cmake