Test::Classを使ってみた。
必要なのは以下の構成でのライブラリ
lib/Test/Class/MethodInfo.pm /Class.pm /Devel/SymDump/Export.pm /SymDump.pm
おためしなので以下の二つのファイルを作ってみた。
TestedModule.pm testRunner.pl
TestedModule.pm:
package TestedModule; use strict; use warnings; use lib 'lib'; use base qw(Test::Class); use Test::More; # テスト開始時に必ず実行する sub setup : Test(setup) { diag("====start===="); } # テスト終了時に必ず実行する sub teardown : Test(teardown) { diag("====end===="); } ## たとえばテスト対象の関数をココに書く sub mysub{ sleep(1); # 3で割ったあまりを返す関数とかにしてみよう return shift(@_) % 3; } ## テストの個数が決まっていない場合 sub test_mysub : Test(no_plan) { # テストセットをずらずら並べていく # is ( サブルーチン, 予期される結果,メッセージ) is(mysub(10), 1, 'mod=1'); is(mysub(9), 0,'mod=0'); is(mysub(3), 0,'mod=0'); is(mysub(1), 2, 'mod=2'); } 1;
testRunner.pl:
use lib 'lib'; use Test::Class; # テスト対象となるパッケージ use TestedModule; # テスト実行 Test::Class->runtests;
実行結果はこんな感じに。
# ====start==== ok 1 - mod=1 ok 2 - mod=0 ok 3 - mod=0 not ok 4 - mod=2 # Failed test (TestedModule.pm at line 37) # got: '1' # expected: '2' # ====end==== 1..4 # Looks like you failed 1 test of 4.
予期される結果以外が返ってくるとエラーとして表示しているのがわかる。
Test::Unitを使ってみる
必要なのは以下の構成でのライブラリ
lib/Class/Inner.pm /Devel/SymDump/Export.pm /SymDump.pm /Error.pm /Test/Harness/ /Harness.pm /Unit/ /Unit.pm 階層が深い部分は多すぎるんでパス
use lib 'lib'; use Test::Unit::Procedural; ## テスト環境の構築および実行 create_suite(); run_suite(); #開始時に呼ばれる関数 sub set_up{ print "==== start ==== \n"; } #終了時に呼ばれる関数 sub tear_down{ print "==== end ====\n"; } ## テスト対象となる関数 sub test_mysub{ assert(mysub(10) == 1, 'mod=1'); assert(mysub(9) == 0,'mod=0'); assert(mysub(3) == 0,'mod=0'); #sleep(3); assert(mysub(1) == 2, 'mod=2'); } ## 関数の実体を書く sub mysub{ #sleep(1); my $i=0; # 無駄にループ while($i < 1000){ $i++; open(IN,"+> dummy.txt") || die $!; close(IN); unlink("dummy.txt"); } # 3で割ったあまりを返す関数とかにしてみよう return shift(@_) % 3; }
結果:
.==== start ==== ==== end ==== F Time: 2 wallclock secs ( 0.13 usr + 1.45 sys = 1.58 CPU) !!!FAILURES!!! Test Results: Run: 1, Failures: 1, Errors: 0 There was 1 failure: 1) lib/Class/Inner.pm:116 - test_mysub(Class::Inner::__A0) mod=2 Test was not successful.
時間が出るのが面白いね。