为了测试目的,我如何防止Perl使用模块?

Col*_*ine 5 testing perl

我正在开发一套Perl脚本和模块,然后部署在我们公司的不同机器和系统上.某些设施依赖于可能安装或不安装在不同机器上的特定模块.我使用'eval'来检测这个模块是否可用.

我刚刚收到一个故障报告,结果是用户没有在他的机器上成功安装模块(但没有意识到他没有):但我的代码中的错误是我没有在这种情况下,将错误条件传递到顶层,因此它会丢失,并且脚本只是默默地无法执行其部分功能.

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

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

但我现在要做的是为这种情况编写一些测试:但是如何在自动测试中明智地使该模块暂时不可用.我真的不希望我的测试使用sudo来移动模块(我可能在同一时间在机器上做其他事情).

有没有人知道我可以告诉Perl的方法"无论我试图'使用'还是'要求'它出于测试目的,都找不到这个模块"?

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

raf*_*afl 11

有几个CPAN模块就是这样做的.我经常使用的是Test::Without::Module.另一个是Devel::Hide.那些两个,以及其他一些我现在还记不起来的名字,都是以同样的方式工作,通过连接到perl的模块加载@INC,或者CORE::GLOBAL::require.其中的详细信息记录在perldoc -f require.