我有一个使用 CMake 生成的 Visual Studio 2012 C++ 解决方案,我在其中使用 google test 进行单元测试。这大部分工作正常,但在我的一个测试中,我想从本地目录读取设置文件。为了找到该文件,我使用以下 CMake 命令将该文件作为构建后步骤从我的源代码树复制到构建和安装目录:
install(FILES ./adapters/settingFile.txt DESTINATION .)
add_custom_command(TARGET testAdapters POST_BUILD
COMMAND "${CMAKE_COMMAND}" -E copy
"${CMAKE_CURRENT_SOURCE_DIR}/adapters/settingFile.txt"
"${CMAKE_CURRENT_BINARY_DIR}"
COMMENT "Copying elastix parameter files")
这工作正常:构建我的测试后,settingFile.txt 与 testAdapters.exe 位于同一位置。右键单击 testAdapters 项目并启动调试 session 也可以找到。
但是,如果我选择从“测试资源管理器”窗口中运行测试,无论是通过“全部运行”还是通过右键单击测试并选择“运行选定的测试”,测试都找不到 settingsFile.txt。通过右键单击并选择“调试选定的测试”,我发现从“测试资源管理器”运行测试,工作目录默认为 visual studio 程序目录:C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE
。我可以想到几种可能的解决方案,但不知道如何实现:
- 设置“测试资源管理器”的工作目录
- 为每个测试可执行文件设置工作目录
- 为所有谷歌测试设置工作目录
- 使用 CMake 设置一些指向用户指定位置的定义,并在测试代码中使用它。 (我认为这是一个相当丑陋的解决方案)
我需要一个独立于平台的解决方案。有谁知道如何实现 (1) 或 (2),或者您知道更好的解决方案吗?
最佳答案
使用当前的 GTA 0.12.3 版本,您至少可以实现 (1):
- 工具
- 选项
- Google 测试适配器(或使用搜索选项)
- 一般
- 工作目录(底部)
不幸的是,GTA 似乎只支持 $(ExecutableDir)
(默认)和 $(SolutionDir)
。好像GTA分不清哪个工程是单元测试工程,所以不能用工程目录作为起始目录。
关于c++ - Visual Studio 中谷歌测试的工作目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16319639/