Visual Studio 2019中如何为测试项目引用的源项目设置UNIT_TESTS预定义
解决VS2019 Google Test项目中条件传递预处理器定义到源项目的问题
方案1:通过项目引用属性直接传递
- 右键你的单元测试项目 → 属性 → 通用属性 → 框架和引用
- 选中被引用的源项目,点击右侧的「属性」按钮
- 在弹出的窗口中,选择「C/C++」→ 预处理器 → 预处理器定义,手动添加
UNIT_TESTS后保存设置 - 这样只要是单元测试项目触发源项目构建,源项目就会启用这个预定义;单独构建源项目时该定义不会生效
方案2:给源项目添加条件属性配置
- 右键源项目 → 属性 → 配置属性 → C/C++ → 预处理器 → 预处理器定义
- 点击下拉箭头选择「编辑」,再点击「宏」按钮查看可用变量
- 添加条件定义:
$(IfTargetProjectHasConfiguration('你的测试项目名|Debug', 'Debug'),UNIT_TESTS,)- 替换
你的测试项目名为实际的单元测试项目名称,Debug改为你正在使用的配置(如Release)
- 替换
- 这个配置会让源项目仅在被指定的单元测试项目触发构建时,才启用
UNIT_TESTS预定义
头文件逻辑优化(可选)
你的当前头文件仅在UNIT_TESTS定义时暴露func(),可以微调逻辑确保导出/导入更严谨:
#ifndef TEST_H #define TEST_H #ifdef UNIT_TESTS #ifdef INTERFACE_EXPORTS #define INTERFACE_API __declspec(dllexport) #else #define INTERFACE_API __declspec(dllimport) #pragma comment(lib, "Interface.lib") #endif INTERFACE_API void func(); #else // 非测试场景下如果不需要暴露func,此处可留空;需要的话可添加默认声明 #endif // UNIT_TESTS #endif // TEST_H
验证方法
- 单独构建源项目:检查生成的lib/dll文件,确认
func未被导出(如果非测试场景不需要的话) - 构建单元测试项目:此时源项目会自动带上
UNIT_TESTS预定义,func会被导出,测试项目可正常链接调用
内容的提问来源于stack exchange,提问作者JJenkins
相关产品推荐
相关产品推荐

