tcltest单元测试:如何检查约束是否处于活动状态以启用代码重用

时间:2015-01-30 03:48:34

标签: unit-testing tcl

我们正在使用tcltest进行单元测试,但我们发现很难在我们的测试套件中重用代码。

我们有一个针对不同系统配置执行多次的测试。我创建了一个包含此测试的proc,并在任何地方重复使用它,而不是在整个套件中多次复制测试代码。

例如:

proc test_config { config_name} {
    test $test_name {}  -constraints $config_name -body {
        <test body>
    } -returnCodes ok
}

问题是我有时只想测试某些配置。我将配置名称作为参数传递给proc,如上所示,但测试的-constraints {}部分没有按预期查找$ config_name参数。除非我对配置名称进行硬编码,否则总是跳过测试,但是使用proc是不可能的,我需要在任何地方复制代码才能对约束进行硬编码。

有没有办法查看是否在tcltest配置中启用了约束?

这样的事情:

proc test_config { config_name} {
    testConstraint X [expr { ::tcltest::isConstraintActive $config_name } ]
    test $test_name {}  -constraints X -body {
        <test body>
    } -returnCodes ok
}

那么,tcltest中是否有一个函数可以执行 :: tcltest :: isConstraintActive $ config_name 之类的操作?

1 个答案:

答案 0 :(得分:1)

  

有没有办法查看是否在tcltest配置中启用了约束?

是。如果您没有传入参数来设置约束的状态,testConstraint命令将执行此操作:

if {[tcltest::testConstraint foo]} {
    # ...
}

使用它来决定是运行测试还是单一测试设置或清理。应始终仅通过约束来打开或关闭测试,以便生成的报告tcltest可以正确跟踪禁用的测试以及原因,并且每个测试都有-setup-cleanup选项,允许脚本如果约束匹配,则在测试之前和之后运行


就个人而言,我不建议将测试放在过程中或使用变量作为测试名称。它的工作原理和一切,但是当你试图找出测试失败的原因和原因时,它会让人感到困惑;调试很难,无需添加。 (我还发现apply 很好是一种在测试中获得类似过程的东西的方法,而不会丢失“让那里的代码可以检查”属性。)