【回眸】Tessy 单元测试软件使用指南(四)常见报错及解决方案与批量初始化的经验
前言
在使用Tessy进行单元测试时,测试遇到的问题可谓五花八门,分析代码时遇到的错误很多,输入测试用例执行后的错误更是多如牛毛。以下是一些我做单元测试中遇到的报错,和我试了好用的解决方案,供各位牛友们参考
分析时Tessy的报错
1.fatal error: Tricore/Compilers/Compilers.h: No such file or directory
解决方案:
需要在源码里找到Compilers.h的完整路径,添加至 Overview--Source--compiler--includes,如果代码中包含头文件的上级目录,则路径添加到上级目录的上级目录即可。
2.error: #error "Compiler unsupported"
解决方案:
问题出现的原因时编译器不支持 #error .理论上应该替换合适的编译器和环境,但是由于Tessy没有更合适的编译器,只好退而求其次,不更换编译器,选择注释 代码中的#error部分,而后该错误消失。
3.warning: invalid suffix on literal;C++11 requires a space between literal and string macro
解决方案:
该警告出现的原因是编译器误用为C++的编译器,调回C语言的编译器即可
4.error: unknown type name 'Ifx_Strict_32Bit'; did you mean 'Ifx_SReg_32Bit'
解决方案:
该错误出现的原因是编译器不认识 type define的内容,需要在Tessy的 Overview--Source--compiler--define 里添加Ifx_Strict_32Bit的定义,源代码里定义的volatile unsigned int ,但是在define里这样添加后编译器不认 unsigned 并将其识别为error,于是将其改为int。
5.error: unknown type name 'fract' error:unkown type name 'sfract';did you mean 'cfract'?
解决方案:
该错误出现的原因是编译器不认识 type define的内容,需要在Tessy的 Overview--Source--compiler--define 里添加 fract = long ; sfract = short 随后该错误消失。
6.error: error: unknown type name 'IFX_INLINE'
解决方案:
该错误出现的原因是编译器不认识 type define的内容,需要在Tessy的 Overview--Source--compiler--define 里添加宏定义 IFX_INLINE = static inline 编译器不认,并且报错 error: inline: No such file or directory.经过研究发现改成IFX_INLINE = inline 报错信息随后消失。
7.error: use of undeclared identifier '__extru' error: use of undeclared identifier '__insert' error: use of undeclared identifier '__getbit' error: use of undeclared identifier '__mfcr' error: use of undeclared identifier '__disable'
解决方案:
该错误主要是由一个很大的库文件引起的,暂时没有找到很好的解决方案,选择替代的方案就是注释Bsp.h(包含那个库文件的头文件),并且添加 _TASKING_的宏,在环境设置的地方禁用内联函数。
8.error: unkonwn register name 'd2' in asm error: unkonwn register name 'd0' in asm error: unkonwn register name 'a11' in asm error: unkonwn register name 'a10' in asm error: unkonwn register name 'e14' in asm
解决方案:
该错误主要是由一个很大的库文件引起的,暂时没有找到很好的解决方案,选择注释掉这个库文件,该错误最终消失
输入测试用例后Tessy的报错
9.gcc: error: inline: No such file or directory gcc:error: int: No such file or directory
解决方案:
该错误主要是与Overview--Source--compiler--define 里宏定义设置的空格有关,删除空格后重新分析,该错误消失。
输入测试用例后Tessy的报错
10.gcc: error: inline: No such file or directory gcc:error: int: No such file or directory
解决方案:
该错误出现的原因是宏定义位置在 = 之前删除空格即可,删除空格后该错误消失。
11.Undefined reference to 'Mcal_WriteCpuEndInitProtReg'Undefined reference to 'wait'
解决方案:
在TIE界面找到unused的函数Mcal_WriteCpuEndInitPortReg和函数wait,移到Used 函数部分并且进行打桩。需要注意的是,如果已经打了普通桩,还是报这个类似的错误,则需要取消普通桩,将普通桩改为高级桩。有些void函数必要时也可以打advanced桩(高级桩)
12.error 0x4: [tstcomm:readFromBuffer] Unable to receive block size
解决方案:
该错误有很多可能的原因,这个排查出是一个函数没有打桩导致的这个错误。
13.error 0x4: [tstcomm: readFromBuffer] Uable to receive block size
解决方案:
该错误并未解决。
14.error: expected ';' , ',' or ')' before '&' token
解决方案:
遇到这个错误的原因经过多网站查找,确定了是因为C语言不支持引用,因为必须打桩print_f,总会遇到这个问题,而且没法避免。迫不得已只好把默认的C语言环境改为C++,这个错误就消失了。
或者还有一个解决方案是因为对带有下划线的函数打了普通桩,一般的库函数不支持打桩,取消打桩即可。
15.Undefined reference to 'm88q5192_set_port_based_vlan'Undefined reference to 'm88q5192_set_vlan_tag'
解决方案:
在TIE界面的搜索栏里 搜索 m88q5192_set_port_based_vlan函数和 m88q5192_set_vlan_tag函数,将他们移入Used函数,然后打桩(普通桩或者高级桩)填入每个case需要的参数即可执行test case后进行下一步分析。
批量初始化
有些函数在进行测试时,打桩后有很多个函数,进而有很多参数,测试用例多则百来个,如果一个一个赋值时一件非常痛苦的事情,在使用Tessy的过程中我逐渐了解到一些可以批量初始化的方法,即在最左边的变量栏,不管是参数还是单个变量,点击右键开始赋值,和单个case赋值的逻辑一样,如果需要随机值选random即可,如果需要赋值 NULL 和 none 也是一样,只要选空指针和忽略值就行了。
外部函数可以打全局普通桩(下划线开头的函数除外)。
一些其他的报错记录
有一些是下划线开头的库函数是不可以打桩的,否则会报错。
但是有时候tessy会默认打桩,这个时候就需要手动取消打桩(don't create stub)
test case如果试管架logo是灰色的,说明数据没有填写完整
在集成测试的时候没有参数的函数可以添加为 work task函数,添加 work task 函数后,用例会执行。
Tessy常用快捷键
运行用例:ctrl +e
全选:ctrl +a
保存:ctrl +s
切换界面:ctrl + Tab
增加用例:insert
增加步骤:ctrl + insert
更改选中的用例/模块/文件夹名:F2
根目录下新建文件夹:shift + insert
文件夹下新建模块:insert
保存为tmb件 :ctrl + u(在TDE界面使用)
选中恢复tmb文件:ctrl + t(在TDE界面使用)
将预期结果更改为实际执行结果: Alt + x
单步执行:F5(debug界面使用)
跳过该函数运行:F6(debug界面使用)
全速运行:F8(debug界面使用)
删除选中的case或者step:delete
选中变量名后统一赋初值:ctrl +i
执行选中用例 ctrl +e
终极再见大法
实在没办法达到预期覆盖度且该函数不重要时,可以选择屏蔽该函数,但是尽量别一整个模块都屏蔽了,除非是生成的代码并且领导明确说可以不测~
【最后更新于】:2025/11/25
后记
短期内应该不会再继续更新Tessy系列了,有热心分享的小伙伴也可以投稿后台,将你遇到的错误和解决方案分享给大家,感谢~
看到这里的读者朋友们可以点击专栏查看同系列的其他文章,希望能帮到屏幕前的每一位应届生往届生,该博文最初发表在CSDN上。
#你的秋招白月光和意难平公司##实习生如何通过转正##找实习是选平台还是选业务?##xxx岗位的一天##通信/硬件求职避坑tips#本专栏助应届生从物联网小白成长为企业争抢的技术人才,聚焦三大核心技术:传感器应用(环境监测)、嵌入式开发(STM32/Arduino)、通信协议(LoRa/NB-IoT/MQTT),配合10+实战项目(如智能温湿度监控系统)积累项目经验。覆盖智能硬件、工业物联网、智能家居领域岗位需求,解析企业招聘技术重点与面试题,帮电子、计算机、自动化等专业学生构建知识体系,提前锁定名企Offer!