关于tcl测试的问题

时间:2011-07-13 20:16:40

标签: c++ c testing tcl

我有一个关于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

任何人都可以帮我吗?

3 个答案:

答案 0 :(得分:1)

哈希开始发表评论,但要小心。

http://wiki.tcl.tk/1669

答案 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包 - 遵循这种模式,带有一些额外的参数来控制运行测试的条件和预期的结果。)