我们正在使用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 之类的操作?
答案 0 :(得分:1)
有没有办法查看是否在tcltest配置中启用了约束?
是。如果您没有传入参数来设置约束的状态,testConstraint
命令将执行此操作:
if {[tcltest::testConstraint foo]} {
# ...
}
但不使用它来决定是运行测试还是单一测试设置或清理。应始终仅通过约束来打开或关闭测试,以便生成的报告tcltest可以正确跟踪禁用的测试以及原因,并且每个测试都有-setup
和-cleanup
选项,允许脚本如果约束匹配,则在测试之前和之后运行。
就个人而言,我不建议将测试放在过程中或使用变量作为测试名称。它的工作原理和一切,但是当你试图找出测试失败的原因和原因时,它会让人感到困惑;调试很难,无需添加。 (我还发现apply
很好是一种在测试中获得类似过程的东西的方法,而不会丢失“让那里的代码可以检查”属性。)