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

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

tests を自分で数えるようなオレオレテストモジュール

#!/usr/bin/perl -w
use strict;
use warnings;

my $t = MyTest->new();
$t->do_test1;
$t->do_test2;

package MyTest;
use Test::Builder;

sub new {
    my $class = shift;
    my $builder = Test::Builder->new();
    $builder->{Have_Plan} = 1;#本当はこれ書きたくない
    my $self = {
        builder => $builder,
        num_tests => 0,
    };
    bless $self, $class;
}


sub do_test1 { #本当はここで自分のやりたいテストを書く
    my $self = shift;
    $self->_my_ok(1);
    $self->_my_ok(1);
    $self->_my_ok(1);
    $self->_my_ok(1);
}

sub do_test2 { #本当はここで自分のやりたいテストを書く
    my $self = shift;
    $self->_my_ok(1);
    $self->_my_ok(1);
}

sub _my_ok {
    my $self = shift;
    my ($cond) = @_;
    $self->{builder}->ok($cond);
    $self->{num_tests}++;
}

sub DESTROY {
    my $self = shift;
    my $builder = $self->{builder};
    $builder->expected_tests( $self->{num_tests} );
}

1;

こんな感じでできた。この書き方だと、0.72 くらいの古い Test-Simple でも通る。expected_tests の代わりに plan を使うと、0.72くらいの古い Test-Simple だと駄目。

   $builder->{Have_Plan} = 1;#本当はこれ書きたくない

なしでいければいいんだけどなぁ。ちなみに、done_testing がサポートされる頃(0.87以降)なら、コレなしでも OK。

まあ、モジュールの中身触るくらいなら、no_plan にしちゃうほうがましかな。