如果要测试的模块不可用,我应该如何杀死perl测试脚本?

时间:2012-01-16 21:17:44

标签: perl testing modulino

我正在构建一个perl应用程序作为“modulino”以使测试更容易。目录结构如下所示:

MainScript.pm
t/001_load.t
t/002_setup.t
t/003_etc...

每个.t测试文件中的第一个测试也会加载模块:

BEGIN { use_ok('MainScript'); }

为了进行测试,我在顶级目录中运行以下命令:

prove -l

到目前为止,一切都很有效。我遇到问题的地方是我不小心直接运行.t测试脚本。

在我的文本编辑器中保存脚本后,我的手指几乎有自动命中热键来运行脚本。当我使用其中一个测试文件执行此操作时,它会尽职尽责地运行并全面报告故障。这是预期的,因为如果从其自己的目录运行它无法看到该模块。我担心的是一些测试会写入文件系统。示例是用于验证的配置文件和数据文件。如果测试脚本无法加载它应该测试的模块,那么我的首选是在测试脚本执行任何操作之前。这样一来,我不必担心其他测试会出现任何问题。

我目前正在使用的解决方案是使用标准使用调用替换BEGIN { use_ok('MainScript'); }行:

use MainScript;

使用prove -l运行测试仍然按预期工作。即使use_ok测试被删除,显然还可以,因为文件的其余部分运行。如果由于某种原因,测试找不到模块,它会扼流并“证明”仍然显示测试文件失败。如果我直接从编辑器运行脚本,它在编译时失败,并显示一条消息,它无法在@INC中找到所请求的模块。这对我来说似乎是一种理想的行为。

有没有更好的方法来做到这一点,和/或这种方法中有什么东西会让我受伤吗?

1 个答案:

答案 0 :(得分:4)

这就是我一直这样做的方式。

我有一个测试(通常名为00-load.t)而use_ok没有其他任何测试(打印版本号除外)。实际运行该模块的所有测试都执行正常use,因为如果失败,则继续进行测试是没有意义的。