tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

Perl のテスト機構を欺く

#!/usr/bin/perl

use strict;
use warnings;

use Test::More tests => 1;

print "a";
ok(1); # 絶対通るはずなんだけど...

ok の引数が 1 だから、絶対に通るはずのテストです。でもコレが通らないんだ。

% prove a.t
a.... Failed 1/1 subtests 

Test Summary Report
-------------------
a (Wstat: 0 Tests: 0 Failed: 0)
  Parse errors: Bad plan.  You planned 1 tests but ran 0.
Files=1, Tests=0,  1 wallclock secs ( 0.00 usr  0.05 sys +  0.00 cusr  0.05 csys =  0.09 CPU)
Result: FAIL
Failed 1/1 test programs. 0/0 subtests failed.

こんな感じ。(一応コケる理由はなんとなく分かってるけどね)

たとえば自分で書いたモジュールのテストをしているときに、モジュールが提供している関数側で print している場合はデバッグが困難になるよなぁ。。。つーか実際にそういうコードを書いて悩んだんだけどね。

tests をちゃんと書かずに no_plan にしてもコケてくれるのが救いといえば救いかなぁ。

ちなみに、5.8 と 5.10 で試したけど、どっちもダメだった。