【发布时间】:2010-10-11 15:08:34
【问题描述】:
我正在开发一套 Perl 脚本和模块,然后将它们部署在我们公司周围的不同机器和系统上。 一些设施依赖于特定的模块,该模块可能安装在也可能不安装在不同的机器上。我使用 'eval' 来检测这个模块是否可用。
我刚刚收到一个错误报告,归结为用户没有在他的机器上成功安装模块(但没有意识到他没有):但我的代码中的错误是在这种情况下,我没有将错误条件传递到顶层,因此它丢失了,脚本只是默默地未能执行其部分功能。
为了调查它,我禁用了我机器上的特定模块,并且很容易找到并修复了问题。但除了卸载它之外,我能想到的唯一禁用它的方法是重命名文件(当然,我必须通过 sudo 来完成)。
我现在在这个模块不可用的情况下运行我的所有测试,并且它已经引发了我没有正确处理这种情况的其他一些地方。
但是我现在想做的是为这种情况编写一些测试:但是我怎样才能明智地使这个模块在自动测试中暂时不可用。我真的不希望我的测试使用 sudo 将模块移开(我可能同时在机器上做其他事情)。
有没有人知道我可以告诉 Perl“不要找到这个模块,无论我出于测试目的从哪里‘使用’或‘要求’它”?
我正在运行 Perl 5.10.0(在 Fedora 12 上),并使用 Test::More 和 TAP::Harness。我们的一些安装运行 Perl 5.8,所以我愿意在测试中使用 5.10 的特性,但不是在代码本身中。
【问题讨论】:
-
一般来说,您可以通过安装和使用自己的 perls 进行测试来解决 sudo 问题。我建议你假装系统 perls 甚至不存在。