如何将tcltest测试套件集成到Git pre-commit hook及解决测试失败退出码为0问题
原因说明
tcltest 2.3.4(TCL 8.5默认搭载版本)没有内置测试失败自动返回非0退出码的逻辑,无论用例执行结果如何,进程默认都会返回0,这是该版本的固有设计。
解决方案
无需解析测试输出,直接调用tcltest内置的统计API获取失败用例数量,手动控制退出码即可:
方案1:修改测试脚本(推荐)
在测试脚本所有测试用例执行完毕、runTests 调用的末尾添加如下代码:
# 读取失败用例计数 set fail_count [tcltest::numTests Failed] # 存在失败用例时返回非0退出码 if {$fail_count > 0} { exit 1 } exit 0
如果需要将跳过的用例也判定为失败,可额外增加对 tcltest::numTests Skipped 计数的判断。
方案2:在pre-commit hook中封装逻辑(无需修改原测试脚本)
如果不想改动原有测试脚本,可以直接在shell格式的pre-commit hook中嵌入统计逻辑:
#!/bin/sh # pre-commit hook内容 tclsh << 'TCL_SCRIPT' # 加载你的测试脚本,替换为实际测试文件路径 source ./tests/all.tcl set fail_count [tcltest::numTests Failed] exit [expr {$fail_count > 0 ? 1 : 0}] TCL_SCRIPT # 测试失败则阻断提交 if [ $? -ne 0 ]; then echo "测试用例执行失败,提交已阻断" exit 1 fi
两种方案都完全基于tcltest原生API实现,兼容性强,不会受输出格式变化的影响。
内容的提问来源于stack exchange,提问作者Joël
相关产品推荐
相关产品推荐

