perl - 我怎样才能防止 Perl 使用模块进行测试?

标签 perl testing

我正在开发一套 Perl 脚本和模块,然后将其部署到我们公司周围的不同机器和系统上。 一些设施依赖于特定的模块,该模块可能安装在也可能不安装在不同的机器上。我已经使用“eval”来检测这个模块是否可用。

我刚刚收到一份故障报告,归结为用户没有在他的机器上成功安装模块(但没有意识到他没有):但我代码中的错误是在这种情况下,我没有将错误条件向上传递到顶层,所以它迷路了,脚本只是默默地未能执行其部分功能。

为了调查它,我禁用了我机器上的特定模块,并轻松地找到并解决了问题。但是我能想到的禁用它的唯一方法,除了卸载它之外,就是重命名文件(当然,我必须通过 sudo 来完成)。

我现在在这个模块不可用的情况下运行我的所有测试,它已经抛出了一些我没有正确处理这种情况的地方。

但是我现在想做的是针对这种情况编写一些测试:但是我怎样才能在自动测试中明智地使这个模块暂时不可用。我真的不希望我的测试使用 sudo 将模块移开(我可能同时在机器上做其他事情)。

有没有人知道我可以告诉 Perl“无论我出于测试目的而尝试‘使用’或‘要求’它的任何地方,都找不到这个模块”?

我正在运行 Perl 5.10.0(在 Fedora 12 上),并使用 Test::More 和 TAP::Harness。我们的一些安装正在运行 Perl 5.8,因此我愿意在测试中使用 5.10 功能,但不在代码本身中使用。

最佳答案

有几个 CPAN 模块可以做到这一点。我经常用的是Test::Without::Module .另一个是 Devel::Hide .这两个,以及其他几个我现在不太记得名字的人,都以几乎相同的方式工作,通过 @INCCORE 连接到 perl 的模块加载: :GLOBAL::requireperldoc -f require 中记录了详细信息。

关于perl - 我怎样才能防止 Perl 使用模块进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3907467/

相关文章:

Perl从html文件中提取模式

node.js - 有类似 Perl 的 Catalyst 路由的 Node.js 吗?

function - Perl - getlogin、getpwuid 和 $<

perl - perl 的#line 指令的目的是什么?

testing - 我应该为小任务选择脚本还是编译代码?

ruby-on-rails - 使用 RSpec 测试嵌套的 CanCan 能力

linux - 确定 TCP 端口是否可用的最佳 perl 方法

ruby-on-rails - 如何使用 rspec 模拟/伪造文件的存在?

javascript - Protractor 中的 Jasmine 助手

android - Netbeans Android - 在真实设备上编译和测试(Unix,OS X)