我有一个关于Tcl的问题,我们正在使用Tcl为c和c ++应用程序编写一些测试用例。我看到一些Tcl测试用例是:
if {0} { #START:HELLO1
//some code here
}#END:HELLO1
if {0} { #START:HELLO2
//some code here
}#END:HELLO2
if {0} { #START:HELLO3
//some code here
}#END:HELLO3
这些代码如何运作? #START:和#END:意味着什么?以及为什么他们有索引如:
HELLO1 HELLO2 HELLO3
任何人都可以帮我吗?
答案 0 :(得分:1)
哈希开始发表评论,但要小心。
答案 1 :(得分:1)
这是一些非常奇怪的Tcl代码。它看起来像专有(?)测试工具的语法。您能否提供有关测试工具名称的任何其他提示?
通常,#
会开始发表评论(虽然它比这更复杂),if {0}
有效地阻止了以下代码块的运行。也许您的测试工具在START和END之间提取代码并在测试模式下运行它,否则代码会被忽略?虽然,}#
(即:两者之间没有空格)通常应该抛出语法错误。您确定要向我们展示测试代码的确切内容吗?
答案 2 :(得分:1)
这些是Tcl术语非常奇怪的测试。如果他们这样读(带有额外的分号):
if {0} { #START:HELLO1
//some code here
};#END:HELLO1
然后他们只是被阻止的代码什么都不做(字面意思; Tcl不会尝试为它生成代码,就像C或C ++编译器不太可能为if(0){...}
做很多事情)但是你得到的版本只是一个语法错误。大括号不应该跟空格以外的任何东西(除非它是特殊的{*}
语法,它会扩展替换)。
那就是说,我希望测试代码看起来更像这样:
doATest "the test name" {
// Whatever makes the body of the test, in whatever language
}
doATest
可能会基于某些逻辑忽略测试,但整个脚本将无视。 (Tcl自己的内置测试工具 - tcltest
包 - 遵循这种模式,带有一些额外的参数来控制运行测试的条件和预期的结果。)