proveコマンドの出力内容を確認する
Test::Harnessの続き。proveコマンドの出力パターン。
パターン1:テスト成功
#!/usr/bin/perl
print "1..2\n";
print "ok 1\n";
print "ok 2\n";
結果は以下の通り。テストは無事成功です。
$ prove test.t
test.t .. ok
All tests successful.
Files=1, Tests=2, 0 wallclock secs ( 0.02 usr + 0.00 sys = 0.02 CPU)
Result: PASS
パターン2:テストは成功、ただしテストコードは正常終了しない
#!/usr/bin/perl
print "1..2\n";
print "ok 1\n";
print "ok 2\n";
die;
結果は以下の通り。テストは無事成功しましたがテストコードが正常終了以外のexit code(この場合は255)を返したので、テスト全体としては失敗。wait statusと呼ばれる子プロセスが親プロセス(この場合はprove)へ返す値が正常終了を示す値ではなかったので、テスト失敗です(wstatの0xff00の前半がtest.tが返したexit codeを示す)。
$ prove test.t
test.t .. 1/2 Died at test.t line 8.
test.t .. Dubious, test returned 255 (wstat 65280, 0xff00)
All 2 subtests passed
Test Summary Report
-------------------
test.t (Wstat: 65280 Tests: 2 Failed: 0)
Non-zero exit status: 255
Files=1, Tests=2, 0 wallclock secs ( 0.02 usr + 0.01 sys = 0.03 CPU)
Result: FAIL
パターン3:テストは失敗、ただしテストコードとしては正常終了
#!/usr/bin/perl
print "1..2\n";
print "ok 1\n";
print "not ok 2\n";
テスト項目が2件有って、1件失敗した事、失敗したテスト項目番号が2番である事が分かります。
$ prove test.t
test.t .. Failed 1/2 subtests
Test Summary Report
-------------------
test.t (Wstat: 0 Tests: 2 Failed: 1)
Failed test: 2
Files=1, Tests=2, 0 wallclock secs ( 0.02 usr + 0.01 sys = 0.03 CPU)
Result: FAIL
意外といくら検索しても、wstatの値をどの様に読み解けばいいのか分かりませんでした。延々とUnixのシステムコールのwait関数のマニュアルを読む羽目になりました。みんなどうしているのでしょう?
あと、最後にテストの実行時間が出てきますが、これもどの様に解釈すべきか書かれていないように思えますね。みんな見ないのかな?普通単体テストで性能試験しないからいらない?
まずはテストコードが「Dubious, test returned 255」を出力した時は、モジュールか、テストコードにコンパイルエラーが有るか、どこかにevalでトラップされない素のdieが有るか疑いまいしょう。


