Subscribed unsubscribe Subscribe Subscribe

Test::Base::SubTest というモジュールを作った。またはテストケースとテストコードは分離されていたほうが嬉しい話

perl

自分は Test::Base が好きでよく使うのだけど、subtest 的な、テストのグルーピングができないのがずっっっと不満だったので、Test::Base::SubTest というモジュールを書いた。

以下の様な拡張記法が使えるようになる。### でsubtestの 1 単位を表現する。

use Test::Base::SubTest;
filters { input => [qw(eval)] };
run_is input => 'expected';
done_testing;

__DATA__

### subtest 1
    ### subtest 1-1
        === test 1-1
        --- input:    4*2
        --- expected: 8

        === test 1-2
        --- input :   3*3
        --- expected: 9

    ### subtest 1-2
        === test 2-1
        --- input:    4*3
        --- expected: 12

実行する

f:id:Cside:20140115222211p:plain

ところで

僕が Test::Base 好きなの、テスト「ケース」とテスト「コード」をちゃんと分けて書けるからなんだけど(別に Test::Base 使わなくても分けられるけど)、これって僕は大事なことだと思っている。

テストケースとテストコードが混ざってるコードだと、たとえばケースの抜け漏れだけレビューしたいときに、コードの中からケースを目 grep しないといけないのが、レビュワーの負担になる。

Test::Base だと、たとえばテストケースをレビューしてもらいたいときは、 __DATA__ 以下だけコピペして見てもらえばいい。まぁ Test::Base じゃなくてもいいんだけど、とにかく自分はテストケースとテストコードを明確に分けたテストを書くように心がけている。

テストを書くこと自体も大事だけど、障害を避けるためにはカバレッジがもちろん重要。であれば、何をカバーしているテストなのかを明確化するために、カバーしている事柄をすっと理解できるようなテストの書き方をするべきではなかろうか。