Perl 如何测试';使用'*失败*?
提供常用的Perl 如何测试';使用'*失败*?,perl,unit-testing,exception,Perl,Unit Testing,Exception,提供常用的use_oktest以测试模块是否正确加载。但是如何测试模块是否无法加载?为类似故障提供模具_ok和同类产品,但不在使用时提供 当模块需要特定参数或特定环境才能正确加载时,这非常有用,我想测试这些条件。例如,我的'Foo'模块可能需要一个配置参数,否则将无法加载: use Foo 'eat my hat'; # This should work use Foo; # This should die 我可以使用test::More轻松测试第一个案例: BEGIN { use_ok('
use_ok
test以测试模块是否正确加载。但是如何测试模块是否无法加载?为类似故障提供模具_ok
和同类产品,但不在使用时提供
当模块需要特定参数或特定环境才能正确加载时,这非常有用,我想测试这些条件。例如,我的'Foo'模块可能需要一个配置参数,否则将无法加载:
use Foo 'eat my hat'; # This should work
use Foo; # This should die
我可以使用test::More轻松测试第一个案例:
BEGIN { use_ok('Foo','eat my hat') }
但是我怎样才能测试另一个呢
BEGIN { use_not_ok('Foo') } # use_not_ok doesn't exist
是
所以
但我还是同意
BEGIN { ok(!eval('use Foo; 1')); }
我不确定那是个好主意。你确定你不想
使用Foo
与使用Foo()相同代码>?在我的例子中,我将一个文件名作为参数传递给模块,如果没有指定文件名,它应该消失,或者如果文件不存在,它应该消失,或者即使文件包含无效内容,它也应该消失。是的,我不确定这是一个好主意<代码>使用Foo()代码>只需加载您的模块。为什么不使用Foo
?@ikegami:也许我不明白你在说什么,但“使用Foo()”在我的情况下也会失败……如果这是真的,那么使用Foo“吃我的帽子”也是一样这回答了我的问题。我想知道是否有可能扩展解决方案,同时也允许我捕获抛出的错误?i、 e.如果模块可以以不同的输出方式死亡,我可以测试它是否正常死亡吗?消息放在$@
中。你想怎么做就怎么做。
BEGIN { require Foo; import Foo; }
BEGIN { ok(!eval { require Foo; import Foo; 1 }); }
BEGIN { ok(!eval('use Foo; 1')); }