1

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

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 中找不到请求的模块的消息。这对我来说似乎是一种可取的行为。

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

4

1 回答 1

4

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

我有一个测试(通常命名为00-load.t),use_ok没有别的(除了打印版本号)。实际执行该模块的所有测试都会执行 normal use,因为如果失败,则继续进行测试毫无意义。

于 2012-01-16T21:53:23.323 回答