Ceedling项目Mock文件未生成,出现头文件找不到错误
问题概述
为air项目(pmk/core目录下文件)编写单元测试时,Ceedling未自动生成mock_pmk.h,测试文件test_pmk_core_error.c中引入该头文件时提示找不到。
可能原因及修复方案
1. 源文件路径配置排除了头文件目录
你的project.yml中source路径排除了pmk的include目录:
:source: - +:/home/gmv/air-dev/air/pmk/core/** - -:/home/gmv/air-dev/air/pmk/core/include/**
Ceedling生成Mock需要扫描被依赖的头文件(如pmk.h)来识别要Mock的函数声明。虽然你在:include和:files中包含了该目录,但source路径的排除规则可能导致Ceedling无法关联到头文件对应的Mock生成逻辑。
修复:
如果include目录下只有头文件(无.c源文件),可以保留source的排除规则,但需要在cmock配置中明确指定要Mock的头文件。建议添加cmock配置块到project.yml:
:cmock: :includes: - /home/gmv/air-dev/air/pmk/core/include/pmk.h :mock_prefix: mock_
2. 测试文件未触发Mock生成逻辑
Ceedling通常需要测试文件中先引用原始头文件(pmk.h),才会自动生成对应的mock_pmk.h。如果测试文件只直接引用mock_pmk.h,Ceedling无法识别需要生成该Mock。
修复:
在test_pmk_core_error.c中调整头文件引用顺序:
#include "pmk.h" // 先引用原始头文件,触发Mock生成 #include "mock_pmk.h"
3. 路径配置优先级或拼写错误
检查:include路径是否正确指向pmk头文件所在目录,确保/home/gmv/air-dev/air/pmk/core/include下确实存在pmk.h。同时,Ceedling的路径解析可能受相对路径/绝对路径影响,建议优先使用相对路径(如果项目结构固定),比如:
:include: - stubs - pmk/core/include
(前提是Ceedling项目根目录在air目录下)
4. Ceedling缓存或构建文件问题
之前的构建缓存可能导致Mock生成逻辑未触发。尝试清理Ceedling的构建目录后重新运行测试:
ceedling clean ceedling test:test_pmk_core_error
内容的提问来源于stack exchange,提问作者Joana Inverno

