TESSY中文网站 > 最新资讯 > TESSY桩函数怎么配置 TESSY桩函数怎么让外部依赖可控
TESSY桩函数怎么配置 TESSY桩函数怎么让外部依赖可控
发布时间:2026/03/11 16:29:54

  做单元测试时,外部依赖一多就会出现两类典型问题,一类是编译链接过不了,另一类是能跑但结果不稳定,今天过明天不过。TESSY的桩函数就是用来把这些外部函数调用替换成可控的替身,让你把注意力放在被测函数的逻辑本身,同时把输入输出和调用行为变成可验证的证据链。

  一、TESSY桩函数怎么配置

 

  配置桩函数建议按先识别依赖再选机制的顺序来做,先把外部函数清单理清楚,再决定用普通桩还是高级桩,最后把代码或数据补齐,避免边跑边补导致口径混乱。

 

  1、先完成一次接口分析把外部调用全部跑出来

 

  在测试工程里展开模块与被测对象,确保源文件已完成分析并能看到接口元素,外部函数会被归到接口中的外部函数区域,后面所有桩配置都以这份识别结果为准,若你刚改过头文件或宏开关,建议先触发一次重新分析再开始配置。

 

  2、在【TIE】里对外部函数创建桩的占位

 

  切到【TIE】视角,找到【External Functions】列表,选中目标外部函数后用右键菜单点【Create Stub】或【Create Advanced Stub】,并按需要选择对当前测试对象生效还是对所有测试对象生效,先把桩的框架创建出来再进入下一步填充。

 

  3、普通桩用【TDE】里的【Stub Functions】直接写桩体

 

  切到【TDE】视角打开【Stub Functions】视图,在【Stub Code】区域补上最小可用逻辑,至少保证返回值与指针输出被正确赋值,否则运行前就会因为缺少返回路径或输出未设置而报错,这种方式适合你需要写一点分支逻辑或需要对复杂类型做加工的场景。

 

  4、高级桩先把参数与返回值的传递方向设对

 

  高级桩的关键不是写代码,而是把每个参数和返回值的方向设成你真正要验证的行为,想把桩的返回值喂给被测对象就把该返回值或对应参数设为IN,想检查被测对象传进来的参数是否正确就把该参数设为OUT,方向设置会决定这些值是否出现在测试数据编辑区与测试报告里。

 

  5、针对多次调用的场景用向量值把每次返回拆开

 

  如果同一个外部函数在一次用例里会被调用多次,优先用高级桩的向量值能力,把每次调用对应的参数期望和返回值按调用顺序填成一组数据,这样你不需要在桩体里写状态机也能让每次调用返回不同值,并且还能把每次调用的参数校验落到报告里。

 

  6、需要复用现成桩实现时用链接对象或库的方式接入

 

  如果你已经有一套独立维护的桩实现或想把下层已验证函数以库方式链接进来,在模块属性里进入【Linker】页,在【Linker Options】里加入对象文件或库文件路径,路径尽量用工程根目录变量写成相对形式,同时注意不要在【TIE】里对同一个外部函数再开启桩设置,避免出现重复定义导致链接失败。

 

  二、TESSY桩函数怎么让外部依赖可控

 

  外部依赖可控的标准很简单,同一份代码同一组测试数据,任何时间任何机器跑出来的结果都一致,并且你能解释每一次外部调用为什么发生、发生了几次、带了什么参数、返回了什么值。围绕这个标准去设计桩,比盲目把所有外部函数都桩掉更有效。

 

  1、先做依赖分级决定哪些必须可控哪些只需可用

 

  把外部依赖按影响分三类,决定结果的依赖例如时间戳、随机数、通信返回码必须做成可控,决定路径但不决定数值的依赖例如日志输出可做成最小可用,完全不影响判定的依赖可以先不改,避免一上来桩太多把维护成本抬高。

 

  2、用高级桩把可控点从代码里挪到测试数据里

 

  想让外部依赖真正可控,最好做到不改桩体就能换行为,高级桩正好把参数与返回值映射成可编辑的数据项,你在测试数据里就能为不同用例配置不同返回序列,也能把参数校验作为期望结果记录到报告里。

  3、用调用次数与参数校验把外部交互变成可验证规则

 

  对关键外部函数不要只关心返回值,还要把调用次数、是否允许被调用、参数是否符合范围一起纳入检查,高级桩的OUT方向就是用来把参数值写进报告做证据的,配合每次调用的向量值可以把一次用例里的多次交互拆成可追溯的序列。

 

  4、指针输出与复杂结构优先用合成变量做数据通道

 

  当外部函数参数里带结构体指针、数组指针、缓冲区指针时,直接在高级桩里做参数校验容易遇到信息不足或显示为未知值的问题,这时更稳的做法是在【TIE】里创建合成变量,把你要喂给桩的复杂数据做成接口变量,再在桩体里读取这些合成变量去填充指针指向的内容,这样数据既可控也能出现在测试数据和报告里。

 

  5、把外部变量也纳入受控范围避免用例被环境污染

 

  不少嵌入式代码除了调用外部函数,还会读取未定义的外部变量或全局状态,TESSY生成测试驱动时可以为未定义外部变量提供定义,同时也能为缺失的被调用函数生成替代桩,你要做的是把这些外部变量的初值和期望变化写进测试数据,别让它们依赖编译器默认初始化或上一次用例残留。

 

  三、TESSY桩函数回归与证据怎么固化

 

  桩配置一旦稳定,就要把它当作测试资产管理,既要保证后续代码改动不会悄悄改变桩行为,也要保证评审或审核时能快速拿出证据解释测试隔离是如何实现的。

 

  1、把桩机制选择写进模块约定并固定命名习惯

 

  同一类依赖尽量用同一种桩机制,例如标量返回优先高级桩,复杂结构优先合成变量加普通桩体,避免团队里有人用高级桩有人用手写桩导致结果口径不一致,同时给合成变量与桩相关数据统一命名规则,后面查证据更快。

 

  2、每次回归先确认接口未漂移再跑全量用例

 

  当你改了被测对象的头文件、宏开关或外部依赖声明,先关注接口元素是否发生变化,因为桩和外部变量定义属于接口设置的一部分,接口结构一变就可能出现桩指向丢失或测试就绪状态变化,先把接口映射调整完再跑回归更省时间。

 

  3、用测试报告把外部交互的可控性展示出来

 

  高级桩的参数与返回值会随着传递方向设置出现在测试数据与报告中,你可以直接用报告证明某次调用返回了哪一个值、参数检查是否通过、以及多次调用是否按序使用了向量值,这比单纯贴桩代码更容易被评审接受。

 

  4、同时使用链接库桩与TIE桩时要做冲突检查

 

  如果你采用链接对象或库来提供桩实现,就要把同名外部函数在【TIE】里的桩设置关闭,并把链接选项固化在模块属性里,否则一旦两边同时生效就会出现重复定义或行为不一致,回归时很难定位到底走的是哪套桩。

  总结

 

  TESSY桩函数配置可以按先识别外部函数再选普通桩或高级桩的路径推进,普通桩在【TDE】里补桩体,高级桩靠【TIE】里的传递方向与测试数据向量把多次调用拆解成可追溯序列。想让外部依赖可控,就把关键返回与交互规则从代码里迁移到测试数据与报告证据里,复杂类型用合成变量做通道,外部变量也要受控,最后通过接口回归检查与报告展示把可控性固化成长期资产。

读者也访问过这里:
135 2431 0251