YAPC::Asiaに参加した

9月27日(木)〜9月29日(土)の三日間にわたって開催された YAPC::Asia に参加してました。帰りの新幹線でやっつけでこのブログを書いてます。

最も印象に残ったセッションがTest::Moreが抱える問題点だったので、そのことについてだけ書きます。

内容

ひとことで言うと、Test::More の書きっぷりがイケてないのでこれを改善するモジュールを書いた、という話でした。詳しい内容はプレゼン資料が既にslideshareにアップされている(What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策)ので、それを見ればいいと思う。

感想

プレゼンの中で話のあった「仕様(spec)を明確にする」という部分には非常に共感する部分があった。結局、RSpec っぽい書き方とか xUnit っぽい書き方とかどうでも良くて、テストコードが意図している仕様が何かを明確にすることが重要なんだと思う。そこで DSL 的なシンタックスがそれを補助したり、意図を伝えやすくするならどんどん使うべきだと。

Test::More の出力は確かにダサいんだけど、個人的にはあんまり気にはしていない。ただ、提案された Oktest のように仕様(spec)ごとにテスト結果の OK / NG が出力される方が出力が圧縮されるし、どんな仕様が満たされていないかはっきりするとは思う。

また、アサーションメソッドの名前が ok とか is とか cmp_ok など不統一であるという話も面白かった。普段 Perl のテストばっかり書いていると気付かないけど、Java で assertThat ばっかり書いていてこそ気付く点だと思う。また、その解決方法が Perl演算子オーバーロードを使った非常にスマートな方法で提示されており素晴しかった。

まとめ

Test::More の出力がイケてない、というのは Perl でテストをちょっとでも書けば誰でも思うところだと思う。でも『まあ subtest() もあるし、テストの数も done_testing() があるし、これでいいか』と思うことなく、実際に『こうするべきだ』という内容がコードと共に(ここ重要)解説されており、非常に説得力のあるプレゼンでした。