You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 19:12:45