【发布时间】:2014-05-27 19:00:16
【问题描述】:
我正在将我的一堆脚本共有的一堆子例程收集到一个模块中。 (我应该早点这样做,但从继承的脚本开始。)我正在使用 Test::More 和 Module::Build 对 非常有用 示例 here 的工作进行建模
所有从文件读取或写入的子例程都包含一行open() or die "errmsg"。我正在为模块编写测试并遇到了这个问题。其中一个子例程检查路径是否指向某物,失败时死亡。在继承的脚本中,子例程如下所示:
sub checkExist {
my ($type, $path) = @_;
if ($type eq 'd') {
if (! -d $path) {
warn("dir not found: $path\n");
die $pathNotFound;
}
}
elsif ($type eq 'f') {
if (! -f $path) {
warn("file not found: $path\n");
die $pathNotFound;
}
elsif (! -s $path) {
warn("empty file: $path\n");
die $emptyFile;
}
}
}
现在,我正在使用以下行进行测试:
is(HomeBrew::IO::checkExist('f', $0), '', "can checkExist find file $0 ?");
除非我选择一个不存在的路径,否则它工作正常,在这种情况下测试脚本会死掉,但测试成功,产生以下输出:
# Looks like your test exited with 2 just after 5.
Dubious, test returned 2 (wstat 512, 0x200)
All 5 subtests passed
如果这是一个失败的测试(而不是一个可疑的通过),我更愿意,但由于这是遗留代码,我还希望这个子例程在失败时停止执行。该怎么办?对这么简单的函数编写测试是愚蠢的吗?
我已经编写了一个 checkExist2 函数,我将在未来使用它,如果成功则返回 undef,否则会返回一个非零错误(所以我可以在其他地方写 die if checkExist2())。欢迎其他不维护 checkExist 功能的建议。
【问题讨论】:
-
可疑是失败,而不是成功。是什么让你说测试成功了?
-
@ysth - 我的假设是它会打印“ALL 测试通过”。当然,正确的解决方案是制定测试计划。
-
@DVK:是的,所有完成的测试都通过了。但是prove or Test::Harness::runtests() 会认为它是失败的。
-
@ysth:你说得对,可疑产生测试
Result: FAIL,但所有子测试都通过了。