perlでテストファースト

私のperlのテスト環境について書いてみます。

perlスクリプトのテストには、Test::Moreモジュールを使っています。
使い方はこんな感じ。

Module.t

use strict;
use Test::More 'no_plan';

BEGIN{ use_ok('Module')};

my $r = Module->new;
is ref($r), 'Module', 'ref';	# Module->newのクラスがModuleであればOK
is $r->add(2,5), 5, 'add';		# add(2,5)をコールして5が返ってくればOK

テストファイルが一杯できると、ひとつづつテストするのが面倒くさくなります。
そこで、以下のようなスクリプトを書いてテストをまとめて行うようにしています。
ちなみに、ここで使っているTest::Harnessモジュールは、Test::Moreの出力結果をサマリー表示してくれるモジュールです。

run_all_tests.pl

#
#	使用方法:
#		run_all_tests.pl
#		run_all_tests.pl <相対パスでテストファイルの格納ディレクトリを指定>
#		run_all_tests.pl -f <フルパスでテストファイルの格納ディレクトリを指定>
#
#	例:
#		D:\Perl> run_all_tests.pl				<-- D\Perlにあるファイルを実行
#		D:\Perl> run_all_tests.pl t\			<-- D:\Perl\tにあるファイルを実行
#		D:\Perl> run_all_tests.pl -f D:\Perl\t	<-- D:\Perl\tにあるファイルを実行

use strict;

use Test::Harness;
use Getopt::Std;
use Cwd;

my %opt;
getopts('vf', \%opt);
$Test::Harness::verbose = $opt{v};

# テストファイルが格納されているディレクトリが
# フルパスか相対パスかで分岐
my $path;
if($opt{f})	{ $path = $ARGV[0]; }
else		{ $path = Cwd::getcwd() . '/' . $ARGV[0];}

# ディレクトリのファイル一覧を取得
my @test_files;
opendir DH, $path or die "$path:$!";
while (my $file = readdir DH) {
	next if $file =~ /^\.{1,2}/;	# '.'や'..'の場合スキップ
	push @test_files, $path . $file;
}
closedir DH;

runtests @test_files;

さらにrun_all_tests.plと入力するのが面倒なので、以下のようなバッチファイルを作ってパスを通しておき実行はallだけで良いようにしています。

all.bat

@echo off
run_all_tests.pl %1 %2 %3


実行結果

D:/develop/perl/t>all
D:/develop/perl/t/Module....ok
D:/develop/perl/t/Hoge......ok
D:/develop/perl/t/Piyo......ok
D:/develop/perl/t/Foo.......ok
All tests successful.
Files=4, Tests=32,  2 wallclock secs ( 0.00 cusr +  0.00 csys =  0.00 CPU)

皆さんはどのようなモジュールを使ってテストしているのでしょうか。