.t ファイルを t/ のサブディレクトリに置いたときの対応

ちょっとハマったので、メモ。(こういう話題のエントリは、タイトルのつけ方が難しい・・・)

CPAN形式のディレクトリ構成にして自動テストをする場合、デフォルトでは、Makefile.PL と同階層にある t/ ディレクトリ直下のテストファイル(*.t)が実行されます。つまり、

$ perl Makefile.PL
$ make
$ make test

とテストを実行した場合、

t/*.t

は実行されるけど、

t/*/*.t

といったように、t/ ディレクトリにサブディレクトリを作成してその中に置かれた .t ファイルは実行されません。

make test を使う場合

このようなサブディレクトリに置いた .t ファイルを実行するには、Module::Install を使っている場合、Makefile.PL で tests() 関数を使って明示的に指定すればOKです。

use strict;
use inc::Module::Install;

# 省略

tests('t/*.t t/*/*.t t/*/*/*.t')

WriteAll;

モダンPerl入門 の 172ページを参考にしたんですが、tests() 関数が、「test() 関数」と typo になっていたので、小一時間ほどハマったのでした・・・

prove コマンドを使う場合

ちなみに、prove を使っている場合は、-r オプションをつけて実行すれば、t/ ディレクトリを再帰的に見てくれます。

$ prove -r

prove のほうが再帰的に見てくれるので賢いですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>