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

tcltest unit tests: how to check if constraint is active to enable code reuse

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

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

例如:

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?

Is there a way to look if the constraint is enabled in the tcltest configuration?

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

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

但是不要使用它来决定是运行测试还是进行单次测试设置或清理。测试应该始终只通过约束直接打开或关闭,以便生成的报告 tcltest 可以正确跟踪哪些测试被禁用以及出于什么原因,并且每个测试都有允许脚本的 -setup-cleanup 选项要运行测试前后如果约束匹配.


就我个人而言,我不建议将测试放在过程中或使用变量作为测试名称。它可以正常工作,但是当您试图弄清楚什么测试失败以及为什么失败时,它会让人感到困惑;不添加调试就已经很困难了。 (我还发现 apply 很棒的 作为一种在测试中获得类似过程的东西而不会失去“在那里检查代码”的方法 属性.)