簡単なアクセサのテストを Test::Base で書くとして、ちょっと困ったことがありました。
Read アクセサとして、単なるスカラー値と、リファレンス(例えば aref) を戻すのがあって、その戻り値が正しいかという基本的なテストをしたい。Test::Base::run の中はできるだけシンプルに書きたいと思ってる。
今のところ、以下のような形で、run の中でブロックの名前を元に処理を分岐させてるんだけど、もうちょっと良い方法(if 文のない方法)はないかなーと思っています。
dumper フィルタあたりをうまくカマせるのが良いのかな。。。
use strict; use warnings; use TestObj; use Test::Base; my $obj = TestObj->new({ a => 'a', b => 'b', c => [qw/c d/], }); filters { input => [qw/chomp/], expected => [qw/chomp/], }; run { no strict 'refs'; my $block = shift; my $accessor = $block->input; if ( $block->name eq 'c' ) { is_deep( $obj->$accessor => $block->expected, $block->name ); } else { is $sub->accessor => $block->expected, $block->name; } }; __DATA__ === a --- input a --- expected a === b --- input b --- expected b === c --- input c --- expected eval [qw/c d/]