2017-01-25 7 views
0

私はCPANのTestモジュールを使ってテストスクリプトを書いています。私のプログラムがURI :: URLパッケージを読み込むかどうかを調べるためにスクリプトをテストしたいと思います。これは可能ですか?Perlスクリプトが特定のモジュールをロードするためのテストを書く

+0

Test :: Moreは['use_ok'](https://metacpan.org/pod/Test::More#Module-tests)と' require_ok'を持っています...あなたがTestを使用している特定の理由がありますか? .pmの代わりに.pmを使用します。 Test :: Moreはかなり標準的です。 – ThisSuitIsBlackNot

+0

私は 'Test :: More'を使用しています。私はそれらのテストを試しましたが、私のテストスクリプトがパッケージをロードできるかどうかだけを見ているようです。別のファイルから実行しているターゲットスクリプトがパッケージをロードしているかどうかをテストしたいと思います。 – StevieD

答えて

3

私が正しく理解していれば、あるコードが特定のモジュールをロードしているかどうかを確認する必要があります。

# run your script (e.g. via 'do' or 'require') 
# ... 

ok $INC{'URI/URL.pm'}, "URI::URL was loaded"; 
4

%INCを解析するのではなく、モジュールModule::Loadedを使用する方がよいかもしれません:

あなたはその後、その後%INCをチェックし、コードの一部を実行することによってそれを行うことができます。これはperl 5.9.4以降のコアモジュールです。あなたの問題を解決し

http://perldoc.perl.org/Module/Loaded.html

use Module::Loaded; 

if (is_loaded('URI::URL')) { 
    print "Is loaded\n"; 
} else { 
    print "Is NOT loaded\n"; 
} 

希望。

+0

これはこの文脈でうまくいきますが、リストコンテキストでは、 'is_loaded'は失敗した場合(falseの代わりに)何も返しません(空のリスト)。 'foo(is_loaded(" Weird :: Stuff "))'は実際には引数なしで 'foo()'を呼び出します。 – melpomene

+0

@zdimあなたが 'my%hash =(foo => 1、bar => is_loaded($ module)、baz => 2)'を実行してから 'is_loaded'が突然空リストを返し、後続のキーは値になり、その逆もあります。そして、あなたはあなたのbugzillaやCGIコードにセキュリティーホールを持っています(悪名高いPerl Jamの話を見てください)。その原因は '$ cgi-> param()'であり、少なくともリストを返すように文書化されています! – melpomene

+0

@zdimいいえ、 'is_loaded'が常にスカラー(' undef'を含む)を返しても、すべて正常です。 – melpomene

関連する問題