Test::Moreのsubtestのテストはどう書くのが一番きれいなのか

コードを見る限り、ガードオブジェクト使うとteardown部分は気が楽ですよ。以下のような使い方をすればガードオブジェクトはスコープを抜けた瞬間に必ず実行されるのでteardownのタイミングなんて気にする必要さえない。

use Scope::Guard;

subtest "A context" => sub {
my $subject;
my $setup = sub {
$subject = Bar->new;
return Scope::Guard->new(sub {
undef $subject;
});
};

subtest 'foo_method' => sub {
subtest 'given xxxx arguments' => sub {
my $guard = $setup->();
....
# teardownの明記はいらない
};
};
};
で、これをsubtestごとにやるってのが常態化するなら、全部t/Util.pm とかにまとめちゃえばいい(けどそのあたりはお好みで)。ちなみにScope::Guard使わなくても自分で簡単にガードオブジェクトは作れるので、依存関係を増やしたくない場合でもOK。