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

如何在Visual Studio中对C语言项目进行单元测试与函数Mock

基于Visual Studio 2019的C语言单元测试+Mock最优实现方案

一、解决手动引入生产代码库的繁琐问题

不需要每次新建测试项目都手动配置依赖,通过项目依赖绑定+通用属性表实现一次配置全测试项目复用:

  • 首先设置解决方案项目依赖:右键单元测试项目,依次选择【生成依赖项】→【项目依赖项】,勾选对应的productionCode项目,后续生成测试项目时会自动先编译更新生产代码项目,无需手动同步库版本。
  • 其次创建通用属性表统一配置引入规则:
    1. 打开【视图】→【其他窗口】→【属性管理器】,右键任意单元测试项目选择【添加新项目属性表】,命名为CommonCUnitTest.props保存。
    2. 打开属性表做三处配置,全部使用相对路径适配不同设备环境:
      • 【C/C++】→【常规】→【附加包含目录】:添加生产代码头文件所在路径,示例:$(SolutionDir)productionCode\inc
      • 【链接器】→【常规】→【附加库目录】:添加生产项目的lib文件输出路径,示例:$(SolutionDir)x64\$(Configuration)\
      • 【链接器】→【输入】→【附加依赖项】:添加生产代码生成的lib文件名,示例:productionCode.lib
    3. 后续所有新建的单元测试项目,只需要在属性管理器中右键选择【添加现有属性表】,导入CommonCUnitTest.props即可复用所有配置,无需重复设置。

二、兼容VS的C语言单元测试+Mock框架选型

推荐使用Unity + CMock的组合,是C语言领域的主流单元测试方案,完全适配VS2019环境,配置难度低于Fake Function Framework:

  • 框架特性:
    • Unity是轻量C语言单元测试框架,无额外依赖,语法简单,VS下直接编译即可运行
    • CMock是配套Unity的自动Mock生成工具,仅需传入待Mock模块的C头文件,就能自动生成Mock函数代码,无需手动编写Stub逻辑
  • VS环境配置步骤:
    1. 将Unity和CMock的源码放到解决方案的第三方依赖目录,示例路径:$(SolutionDir)3rdParty\
    2. 将Unity核心文件unity.c、unity.h和CMock核心文件cmock.c、cmock.h的路径添加到上面的通用属性表的附加包含目录中,或者直接加入测试项目源码列表
    3. 需要Mock某模块函数时,通过CMock命令行工具传入对应头文件,自动生成mock_xxx.c和mock_xxx.h,将生成文件加入测试项目后即可直接调用Mock API,例如xxx_ExpectAndReturn()、xxx_IgnoreAndReturn()等实现Mock逻辑
      如果偏好使用Visual Studio原生C单元测试框架也可,利用C/C兼容特性,测试项目用C++编译,生产代码用C编译,Mock可以直接使用适配C函数的gmock库,配置逻辑同样适配上面的通用属性表方案。

三、Fake Function Framework调试方案

如果仍想使用FFF,只需做两项配置即可解决运行异常问题:

  • 打开单元测试项目属性,在【C/C++】→【预处理器】→【预处理器定义】中添加FFF_NO_DLSYM=1,关闭Linux平台专属的动态符号查找逻辑,适配Windows静态编译环境
  • 待Mock的C函数需要添加__declspec(noinline)声明,避免VS编译器优化将函数内联,导致Mock替换逻辑失效

内容的提问来源于stack exchange,提问作者Kasper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:06:03