Test::Perl::Critic その2

今日はサブルーチンについて。

critic_ok( $FILE [, $TEST_NAME ] )

# t/991_perlcritic.t
use strict;
use Test::More;

eval { require Test::Perl::Critic; Test::Perl::Critic->import(-profile => "t/perlcriticrc") };
plan skip_all => "Test::Perl::Critic is not installed." if $@;

critic_ok( 'bin/get_tweet.pl' );

done_testing;
$ perl t/991_perlcritic.t
ok 1 - Test::Perl::Critic for "bin/get_tweet.pl"
1..1

ファイルを指定してテストする場合に使う。
複数のファイルを指定することはできない模様。


最も気をつけるべき点は、テスト数を明示して上げる必要がある。もしくはdone_testing;を記述する。


なお、第二引数にテスト名を指定することが可能。
デフォルトでは、"Perl::Critic test for $FILE"。
テスト名を'MyTest'とした場合は、以下のようになる。

perl t/991_perlcritic.t
ok 1 - MyTest
1..1

all_critic_ok( [ @DIRECTORIES ] )

# t/992_perlcriti_all_critic_ok.t
use strict;
use Test::More;

eval { require Test::Perl::Critic; Test::Perl::Critic->import(-profile => "t/perlcriticrc") };
plan skip_all => "Test::Perl::Critic is not installed." if $@;

all_critic_ok();

指定したディレクトリ内のPerlファイルに対してテストを実行する。
ディレクトリが指定されなかった場合はblib以下ののPerlファイルを、
blibが存在しない場合は、lib以下のPerlファイルに対してテストを行う。


その1で書いたとおり、このサブルーチンを使用する場合はテスト数を明示する必要がない。

all_code_files ( [@DIRECTORIES] )

非推奨!
[12/7追記]
そもそもimportされないのでパッケージ名から指定しないと使えません。


Perlファイルのリストを返す。
ディレクトリを指定しない場合、blib以下から、
blibが存在しない場合は、lib以下から。
CVSSubversionディレクトリ内のファイルはスキップされる。


ソースコードを見てみると、all_critic_okから呼び出されている。
また、このサブルーチン自体はディレクトリの設定をしてPerl::Critic::Utils::all_perl_filesを呼び出しているだけ。
したがって、このサブルーチンを使いたい場合は、ドキュメントに書いてあるとおりPerl::Critic::Utils::all_perl_filesを使うべき。


なお、Perlファイルの判断条件は以下の2つ

  1. 拡張子が .PL .pl .pm .t
  2. シバンに'perl'を含む