nDiki : Test::Harness
Test::Harness
Perl の標準的なテストスクリプトを実行するためのモジュール。 Perl モジュールのリグレッションテストで使用する。
テストスクリプトは TAP (Test Anything Protocol) にしたがってテストの数やテスト結果を標準出力に出力しなければならない (Test::Harness::TAP 参照)。
Test::Harness に対応したテストスクリプトを作成するためのモジュールとして
- Test (Perl 5.004_05 以降に含まれている)
- Test::Simple (Perl v5.6.2 以降に含まれている)
- Test::More (Perl v5.6.2 以降に含まれている)
などがある。
prove
Test::Harness には prove というコマンドラインツールが付属している。 prove コマンドを使用すると指定したテストスクリプトを実行することができる。
テストスクリプト test.pl を実行する:
prove test.pl
ディレクトリ t の中のテストスクリプト群 (*.t) を実行する:
prove t
prove + テストスクリプトでは Perl モジュールに限らずその他のプログラムのテストにも利用することができる。 例えば C++ で作成したコマンドラインドプログラムの出力をチェックするようなリグレッションテストを Perl スクリプトとして作成してテストするのに使うことができる。
Makefile.PL と Test::Harness
ExtUtils::MakeMaker によって作成された Makefile を用いて
make test
を実行した際も Test::Harness が使用される。
prove を実行した場合と Perl モジュールのソースディレクトリで make test を実行した場合の違い
't' サブディレクトリ以下にテストスクリプトがある時、
prove --blib t
で、make test とほぼ同様のテストが実行される。
ここで make test の場合は ExtUtils::Command::MM の中で blib/lib と blib/arch が @INC に追加された上で Test::Harness::runtests が実行される。このため環境変数PERL5LIBにこれらがセットされた上で、テストスクリプトが実行されるためその子プロセスでも blib/lib や blib/arch からモジュールがロードできるようになっている。
一方 prove の --blib や -I オプションで指定したものは $Test::Harness::switches に設定されて、テストスクリプト実行時にオプションとして使用される。このため子プロセスにはそのパスが引き継がれない)。
スポンサード リンク
Related term
LWP::UserAgent WWW::Mechanize 開発 CGI Template Toolkit プロトコル WiKicker フレームワーク Test::WWW::Mechanize Test::SimpleUnit 例外処理 URI::Fetch AppConfig CGI::Session GNU Make Jcode.pm ExtUtils::FakeConfig Devel::SmallProf Perl で XML cookie Palm テストファースト開発 パッケージ名 TDD wxPerl リファクタリング h2xs ExtUtils::ModuleMaker::TT ExtUtils::ModuleMaker HTTP
2004年8月11日 (水)
■ Perl でテスティングフレームワークを書いてみる

一昨日 Scheme で書き始めたのだが、やはり不慣れな言語でTDDをやってみるのも大変。
ということでPerlでやってみる。やはり最初はこちらの方が楽。 Perl では「これだ」という xUnit が無い。
- Test::Unit : メンテナンス停止中
- Test::SimpleUnit : 不明
- Test::Class : Test::Builder 系のテストフレームワークが必要
WiKicker は Test / Test::Harness を使用する標準的なテストを採用しているが、fixture の処理が面倒に感じている。 なので何か良い xUnit が欲しいのだが、テストのためだけに要求モジュールを追加するのもよろしくないので簡易的なものを自作するのも悪くないかも。
TDDはリズム感があって良いな。 まだリファクタリングフェーズでどの程度リファクタリングしてから、次のレッドフェーズにはいるかの匙加減がまた掴みきれていない。
- [ WiKicker ] 日記機能開発開始 (2003-12-27)
- Perl CGI プログラムのテストには WWW::Mechanize::... (2006-02-18)
- WiKicker に JSON でのページ出力機能を追加 (2007-04-03)
- www.naney.org サーバ断続的にダウン (2006-04-30)
- WiKicker と GNU GPL (2005-05-10)
2004年12月7日 (火)
■ Test::Harness を Perl モジュール開発以外で使う

Test::Harness モジュールに、単独で Test::Harness 用のテストファイル(群)を実行できる prove というツールがついているのを発見。
スクリプトのちょっとしたリグレッションテストを書いたりするのにこれはいい。 ダミーのパッケージを作る(autoconfiscate するとか Makefile.PL 作る)とか、自前でスクリプトを書くとかしないで済む。書きなれたスタイルでテストコードが書けるし。
tpage (Template Toolkit) 用テンプレートをいじる時にリグレッションテストをかけられるようにしたかったで、使ってみることにする。
- Module::Build でソースパッケージング (2005-08-24)
- ActivePerl で Ming (2005-02-23)
- Perl 5.005_03 + Template Toolkit 2.14 (2004-11-10)
- Template Toolkit + PAR (2004-09-13)
- WiKicker の Makefile.PL を Module::Inst... (2006-02-10)
2006年2月18日 (土)
■ Perl CGI プログラムのテストには WWW::Mechanize::CGI を

CGI プログラムを書いていて、いつも困るのがリグレッションテスト。
パッケージのビルド時に実行するテストスーツ (make check / make test 用テストプログラム群) に含めておきたいが、さすがにその場で Web サーバの下へセットアップするわけにもいかない。 ミニ Web サーバを同梱してテストスーツ内で起動する方法はちょっとおおがかかりだし、ポート番号の選択やらサーバの停止の問題もあって、かなり面倒。
結局、テストスーツの中で環境変数や標準入力など CGI リクエスト環境をセットアップして、CGI プログラムを実行するという王道(?)かつ泥臭いテストを書くことになったりする。
何かいいものはないかと探していたところ、WWW::Mechanize::CGI というものをみつけた。
LWP::UserAgent を継承した WWW::Mechanize モジュールは Web ブラウジングを容易にする有名どころのモジュールである。
WWW::Mechanize::CGI モジュールはさらにこれを拡張したモジュールで、HTTP リクエストを、仮想的に CGI プログラムやサブルーチンへの呼出しにしてくれる。 これを用いるとあたかも Web サーバ上の CGI プログラムにリクエストしレスポンスを受けとっているかのように、テストプログラムを書くことができる。
素晴しい。
さっそく WiKicker のテストを書き換えてみた:
use Test::More tests => 2;
use WiKicker::WikICGI::Controller;
use WWW::Mechanize::CGI;
use File::Temp qw(tempdir);
use File::Spec;
my $www_dir = tempdir(CLEANUP => 1);
my $mech = WWW::Mechanize::CGI->new;
$mech->cgi(sub {
$ENV{PATH_INFO} = '' if $ENV{PATH_INFO} eq '/';
WiKicker::WikiCGI::Controller->new->run});
$mech->env($mech->env,
SCRIPT_FILENAME => File::Spec
->catfile($www_dir . '/wiki'),
SCRIPT_NAME => '/wiki');
my $response = $mech->get('http://localhost/wiki');
ok($response->is_success);
like($response->content,
qr|<title>WikiForum\[WiKicker\]: FrontPage</title>|);
WWW::Mechanize::CGI オブジェクトを new した後、cgi メソッドで CGI サブルーチンを指定するか、cgi_application メソッドで外部 CGI プログラムを指定する。 ここでは直接、CGI サブルーチン (WiKicker::WikiCGI::Controller->new->run を実行)を指定した。
なおここで WWW::Mechanize::CGI が使っている HTTP::Request::AsCGI 0.5 における PATH_INFO の扱いが Apache などとは違って、空でも必ず '/' が入るようになっている。 これだと WiKicker では困るので、サブルーチンのところで修正している。
後は必要ならば WWW::Mechanize::CGI::env で、追加の環境変数設定を行っておく。
セットアップが済めば通常の WWW::Mechanize と同様に get 等でリクエストを行いレスポンスを受けとることができるようになる。
いい。しばらく試してみて不具合がなさそうなら、定番のテストスタイルにしたい。
ちなみに Test::Harness 用の Test::WWW::Mechanize にあわせて、Test::WWW::Mechanize::CGI というものもある。 これらを用いるとさらにテストを書くのが楽になるが、依存するモジュールも多いので無理に使わないほうがいいかもしれない。
- Test::WWW::Mechanize で Web アプリケーションをテ... (2006-09-13)
- 一般ユーザで Apache 2.0 を起動する最小限の httpd.conf (2006-07-15)
- 他の Web サイトの情報を URI::Fetch でキャッシュ付き取得 (2005-10-29)
- CGI プログラム、Out of memory! に泣く (2001-01-04)
- [ WiKicker ] 「最近のアクセスログ」処理思案 (2004-01-17)
スポンサード リンク
■よく検索されるキーワード
提案書(75) torrent(69) perl(61) 書き方(45) 充電式カイロ(43) windows(38) x31(36) 使い方(32) linux(32) cvs(25) アジェンダとは(25) usb(25) thinkpad(23) 静電気(21) サンプル(20) 口コミ(20) ヨドバシ(20) アジェンダ(20) 画像(19) debian(19) ubuntu(19) mp980(18) f-01a(18) 手帳(17) tc-1(17) 秋葉原(16) ssh(16) subversion(16) グッズ(16) a6(15) 壁紙(15) ほぼ日手帳(15) c#(14) ダイソー(14) svn(14) 交換(14) インストール(13) 加湿器(13) firefox(12) ノート(12) 無印(12) 日本語(12) wiki(12) ganttproject(12) デロンギ(11) 方眼(11) ヨドバシカメラ(11) デザイン(11) nikkor(11) 設定(11) 作り方(11) dropbox(11) af(10) terastation(10) memcached(10) レビュー(10) カバー(10) カイロ(10) 2009(10) 除去(10) nikon(10) tortoisesvn(10) クラリチン(9) ガントチャート(9) 動画(9) ポメラ(9) ご査収(9) rcs(9) モジュール(9) n-01a(9) フィルム(9) 写真(9) システム手帳(9) edition(9) porter(9) xp(8) imap(8) 4c(8) docomo(8) ミニ6穴(8)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザインProcess Time: 15.240484s / load averages: 0.44, 0.38, 0.42
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク