2012-09-05 64 views
1

我有類似的編寫單元測試的代碼,我需要檢查一個變量的值。TCL中變量的訪問值

#first.tcl 
proc test {a} { 
    if {$a < 10} { 
     set sig 0 
    } else { 
     set sig 1 
    } 
} 
#second.tcl unit testing script 
source "first.tcl" 
test 10 
expect 1 equal to $sig 
test 5 
expect 0 equal to $sig 

有什麼辦法,我可以訪問變量「SIG」的值,因爲我不能改變的第一個腳本。

回答

3

您遇到問題。問題是在第一個腳本中,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 
+0

謝謝多納爾研究員u能闡述的第一部分更:) –

+0

@made_in_india只有當你給我一些關於哪一部分需要闡述的線索。可能的事情範圍很廣,所以我不能只告訴你一切;太多了!縮小到你真正想要的東西,我會澄清那一部分。 –

+0

研究員:謝謝你,我想趕上$ sig的價值。是否可以跟蹤和應用。你可以舉一個例子來說明問題 –