例えば、testしたいメソッドにif elsif elseという条件分岐があるとして、素直に書くとこうなりがちなので
subtest "test for hogehoge" => sub { my $input1 = +{ ... }; my $output1 = $logic->do_hogehoge($input1); is($output1 ... ); my $input2 = +{ ... }; my $output2 = $logic->do_hogehoge($input2); is($output2 ... ); my $input3 = +{ ... }; my $output3 = $logic->do_hogehoge($input3); is($output3 ... ); };
こう書くようになった。
subtest "test for hogehoge" => sub { subtest "success" => sub { my $input = +{ ... }; my $output = $logic->do_hogehoge($input); is($output ... ); }; subtest "fail1" => sub { my $input = +{ ... }; my $output = $logic->do_hogehoge($input); is($output ... ); }; subtest "fail2" => sub { my $input = +{ ... }; my $output = $logic->do_hogehoge($input); is($output ... ); }; };
スコープのお陰で変数名とか気にしなくてよくなる。
こういうのを推し進めていくといわゆるBDDなシンタックスになるのかもしれない