xUnitチックにテストが書けるTest::Classなるものがあることを技評の記事*1で知ったので、試してみました。
どうせ試してみるなら、『テスト駆動開発入門』の写経がいいかなと思いやってみました。Ruby、PythonはやったけどPerlは写経していなかったし、それにPerlのクラスは慣れていないのでちょうどいい機会です。
下準備
Module::Starter
Makefileをいちいち書くのは面倒なのでModule::Starterを入れておきます。
> cpan Module::Starter > cpan Module::Starter::PBP
初期設定としてひな形を作っておきます。
> perl -MModule::Starter::PBP=setup
%HOME%\.module-starter\configを適当に直します。
author: masasuzu email: ***************@gmail.com
デフォルトのままだと実行時にエラーが出るでモジュールの$VERSIONをパッケージ変数に修正します。
修正するファイルは %HOME%\.module-starter\PBP\Module.pm
修正前
use version; $VERSION = qv('0.0.3');
修正後
use version; our $VERSION = qv('0.0.3');
Test::Pod::Coverage
必須ではありませんが、module-staterでPODカバレッジテストを作ってくれるので、インストールしておきます。
> ppm install Test::Pod::Coverage
Test::Class
Test::ClassはWindows環境のせいかよく分からないのですが、テストが失敗してインストールできなかったので、cpan経由ではなくppmからインストールしました。
> ppm install Test::Class
スケルトン作成
コマンド一個でスケルトンを作成してくれます。便利ですね。
> module-starter --module=Money
lib/Money.pm
Mooseで書くかどうか迷ったんですけど、基本に返ろうと言うことで標準的な?クラスで書きました。
内容に関しては特筆すべきことはなさそうです。
package Money; use strict; use warnings; use version; our $VERSION = qv('0.0.3'); 1; package Dollar; use strict; use warnings; sub new { my ($class, $opts) =(@_); return bless $opts, $class; } sub times { my ($self, $multiplier) = (@_); $self->{amount} *= $multiplier; } 1;
t/01money.t
Perlの標準的なテストスクリプトの命名規則がよく分からなかったので、スクリプト名は適当です。
これも特筆すべきところはありません。強いて言うならば、コンストラクタの引数をハッシュリファレンスを渡すように変更しているくらいです。
use strict; use warnings; use Test::Class; Test::Class->runtests; package TestMoney; use strict; use warnings; use base 'Test::Class'; use Money; use Test::More; sub test_multiplication : Test { my $five = new Dollar({amount => 5}); $five->times(2); is(10, $five->{amount}); } 1;
テスト実行
テストスクリプトをそのまま実行してもいいのですが、どうせCPAN形式で書かれているのでmake testで実行します。
> perl Makefile.PL > dmake > dmake test
結果
E:\home\Develop\TDD\perl\Money>dmake test D:\Perl\bin\perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib\lib', 'blib\arch')" t/*.t t/00.load.t ....... 1/1 # Testing Money 0.0.3 t/00.load.t ....... ok t/01money.t ....... ok t/perlcritic.t .... ok t/pod-coverage.t .. ok t/pod.t ........... ok All tests successful. Files=5, Tests=5, 4 wallclock secs ( 0.08 usr + 0.08 sys = 0.16 CPU) Result: PASS
- 作者: ケントベック,Kent Beck,長瀬嘉秀,テクノロジックアート
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2003/09
- メディア: 単行本
- 購入: 43人 クリック: 1,002回
- この商品を含むブログ (153件) を見る