Testライブラリのテストを書く

テストライブラリを書くときに
local Test::More::Level += 1
を忘れるとテストがこけたときに呼び出し元がおかしくてどのテストを直せばよいかわからないということになってしまいます。

ということでしっかりそういうテストも書いておきたいですね。

Test::Builder::Testerを使うとそういうテストライブラリによって起きるテストの出力をテストできます。

package Hoge.pm
use strict;
use warnings;
use Test::More;

sub test {
  my ( $foo, $bar, $msg) = @_;
  is($foo, $bar, $msg);
}

1;

# fuga.pl
use strict;
use warnings;
use Test::Builder::Tester;
use Test::More;
use Hoge;

my $str = <<END_OF_TEST;
#   Failed test 'should fail'
#   at Hoge.pm line 8.
#          got: 'foo'
#     expected: 'bar'
END_OF_TEST

chomp $str;
test_err($str);
test('foo', 'bar', 'should fail');
test_test(title => 'fail works', skip_out => 1);

done_testing;

test_err,test_outで期待される出力を宣言してから、ふつうにテストを書き、
最後に、test_test(テスト名)とやると、test_out,
test_errで宣言した出力とマッチしていたかテストできるようです。

というわけで、Test::Baseをなおして、ingyにpull request送ってみたけど、みてないっぽいので、RTとかにでも登録しとけばよいのかなぁ。。。