你有问题。问题在于,在第一个脚本中,sig
是一个局部变量,在调用test
终止时消失。事后你不能检查它。碰巧,结果test
是分配给sig
; 我不知道您是否可以将其用于测试目的。如果这足够了,您可以这样做(假设您有 Tcl 8.5;对于 8.4,您需要一个辅助过程而不是apply
术语):
source first.tcl
trace add execution test leave {apply {{cmd code result op} {
# Copy the result of [test] to the global sig variable
global sig
set sig $result
}}}
这会拦截(就像面向方面的编程一样)结果test
并将其保存到全局 sig
变量中。它没有做的事情对于测试代码中的问题是正确的:分配给一个变量,然后立即消失。
如果您要进行大量测试,请考虑使用 tcltest 来完成这项工作。这是用于测试 Tcl 本身的包,它可以让您非常轻松地编写执行脚本结果的测试:
# Setup of test harness
package require tcltest
source first.tcl
# The tests
tcltest::test test-1.1 {check if larger} -body {
test 10
} -result 1
tcltest::test test-1.2 {check if smaller} -body {
test 5
} -result 0
# Produce the final report
tcltest::cleanupTests