Cantata开始做C/C++单元测试前,要先把被测源码、原项目构建参数和测试使用的编译环境接起来。工程创建后能看到源码,并不代表测试环境已经配置好,头文件路径、预处理宏、编译器选项或目标Deployment少一项,后面生成测试脚本时就可能报解析错误,构建测试程序时也容易停下来。Cantata提供Testing Project向导,可从CMake、Make、IAR、Keil、Visual Studio等构建环境读取工程信息,配置出错时可以沿着源码位置、Build System和编译参数逐项检查。
一、Cantata怎么创建单元测试工程
1、使用Testing Project向导创建工程
原项目没有现成的Cantata测试工程时,可以从【Create Cantata Testing Project】向导开始。
①打开Cantata IDE,在新建项目入口选择【Cantata Testing Project】。
②进入【Locate Software Under Test】页面。
③在【Software Under Test】区域找到【Location】,点击【Browse】选择被测源码所在目录。
④打开【Build System】下拉框,按原工程选择【CMake】【GreenHills MULTI】【IAR Embedded Workbench】【KeilµVision】【Make】【Microsoft Visual Studio】或【NXP CodeWarrior】。
⑤不确定构建类型时,可以点击【Detect】,让向导根据当前源码目录检查构建环境。
⑥在【Test Project】区域填写测试工程名称,并确认工程保存位置。
⑦点击【Next】继续检查向导识别出的工程信息。
⑧内容确认后点击【Finish】,等待测试工程写入Workspace。
已有Eclipse工程也可以直接作为测试工程使用,不一定要复制一套源码。源码目录比较大时,也可以通过链接目录的方式放进测试项目,减少重复维护文件。
2、检查导入的构建参数
向导完成后,先确认头文件和宏有没有正常带进来,再生成测试脚本。
①展开【Project Explorer】,打开一个主要的.c或.cpp文件。
②查看源码中#include对应的头文件能否正常解析。
③出现头文件找不到时,检查原工程使用的【Include Paths】有没有导入。
④检查条件编译区域使用的宏是否已经包含在测试工程中。
⑤原项目存在Debug、Release或不同Target配置时,确认当前测试工程读取的是准备测试的那一套参数。
⑥重新刷新工程,让Cantata重新解析源码。
Cantata创建测试工程时会从原构建系统读取头文件路径、预处理定义和相关编译设置。原工程本身依赖外部脚本动态生成这些参数时,自动导入后仍要人工核对一次。
3、确认测试使用的Deployment
主机GCC环境和嵌入式交叉编译环境不能直接按同一套配置处理。Cantata测试程序需要使用与被测代码匹配的编译器库和Deployment。
①确认项目原来使用的编译器及版本。
②打开Cantata的Deployment配置,检查当前工程选择的编译器环境。
③使用交叉编译器时,确认对应的【Compiler】、目标架构和语言设置已经配置。
④工程包含C和C++混合代码时,分别检查C与C++编译参数。
⑤目标程序还依赖RTOS或专用运行库时,检查对应Deployment是否已经包含这些环境设置。
⑥保存配置后先构建一份简短测试脚本,确认编译器能够正常工作。
二、Cantata单元测试工程配置错误如何排查
1、工程创建失败先检查源码位置和Build System
向导无法完成,或者点击【Finish】后没有正常生成工程,可以先回到创建页面检查几个基础项。
①重新打开【Create Cantata Testing Project】。
②确认【Location】指向的是被测软件根目录,不要只选择其中一个src子目录。
③检查目录里是否存在原构建系统需要的工程文件。
④重新点击【Detect】,查看识别到的【Build System】是否正确。
⑤识别错误时不要继续创建,手动切换成实际使用的构建系统。
⑥Workspace里已经存在同名测试项目时,更换【Test Project】名称后再创建。
⑦源码目录发生过移动时,重新通过【Browse】定位实际目录,不继续使用旧工程保存的路径。
2、工程能打开但源码大量报错
这种情况通常出现在构建信息没有完整导入。
①打开报错文件,先查看哪一个头文件无法解析。
②回到原工程,找到该头文件实际使用的Include目录。
③检查Cantata测试工程中的【Include Paths】。
④补入缺少的目录后重新刷新源码。
⑤条件编译区域报错时,对照原编译命令检查【Preprocessor Defines】。
⑥像DEBUG、CPU类型、产品型号这类宏要和原工程保持一致。
⑦原编译器带有专用语言扩展时,再检查当前Deployment中的编译器选项。
如果同一个源文件在原项目能编译,在Cantata里却出现大批语法错误,先查编译器参数和宏定义,不要直接改被测源码去迁就测试环境。
3、生成测试脚本后构建失败
工程解析正常,到了测试程序构建阶段才报错,可以从Cantata生成的Makefile和编译日志继续找。
①选中一个依赖较少的源文件生成测试脚本。
②执行测试脚本构建。
③打开【Console】,找到第一处编译或链接错误。
④提示头文件缺失时,回查测试工程的Include路径。
⑤提示宏或类型未定义时,核对原项目的编译定义。
⑥出现undefined reference一类链接错误时,检查被测函数调用的外部对象是否已经加入测试范围。
⑦外部函数不准备使用真实实现时,可在测试脚本中生成对应Stub或Wrapper。
⑧修改配置后重新Build,确认上一处错误消失后再继续处理下一项。
三、工程修好后怎么确认配置可以继续测试
1、先生成一份小范围测试脚本
工程刚调整完成时,不用马上对整个模块批量生成测试。
①在【Project Explorer】中选择一个接口比较简单的源码文件。
②执行Cantata测试脚本生成操作。
③查看生成的Test Script和Cantata Makefile。
④确认函数列表与被测源码一致。
⑤打开测试用例编辑界面,检查参数类型、全局数据和外部调用是否被正确识别。
⑥构建并运行这一份测试脚本。
⑦测试能够生成、编译和执行后,再扩大到其他文件。
2、切换目标环境时重新检查Deployment
同一套测试脚本从主机环境迁到目标板时,测试代码可以继续使用,但底层Deployment需要对应新的目标环境。
①确认当前工程准备运行在哪个目标上。
②检查目标对应的Cantata Deployment。
③核对交叉编译器、芯片架构和运行环境。
④切换Deployment后重新构建测试程序。
⑤确认测试可执行文件能够下载或运行到目标环境。
⑥查看测试结果能否正常返回Cantata主机端。
这样可以把“测试脚本本身的问题”和“目标环境配置的问题”分开,后续出现构建错误时也更容易找到位置。
总结
Cantata单元测试工程配置是否正确,主要看原工程的构建信息有没有被完整带入测试环境,以及当前Deployment能不能匹配实际编译平台。工程创建完成后先用一份依赖较少的源码做验证,可以较早发现路径、宏定义、工具链和外部依赖方面的问题,也能避免后面批量生成测试时一次出现大量错误。如需继续了解Cantata单元测试工程创建、编译环境配置与工程故障排查,欢迎联系咨询。