TDD Advent Calendar jp: 2011 : ATND
の 3 日目担当 shishi です。
私より前の日程の方達見て業界に名だたるお二人を見てビビり、後ろの日程のビッグネームな方達を見てまたビビり、と「前門の虎、後門の狼」のような心持ちですが、自分の担当をしっかりやっていきたいと思います!
Perl での自動テストはテスト自体はしやすい言語であるにも関わらず、資料が多くはないように思います。TDD だとなおさらです。なので、テストの実行が楽な環境をつくるところからの説明があると良いのではと思いました。
そこで、Perl での TDD をしやすいように、自動でテストを実行する環境について書きたいと思います。
Perl での自動的に自動テストを実行する方法としては、Test::Continuous があげられますが、現状だと依存パッケージがインストールに失敗する環境が多いので、今回は他言語の Ruby の力も借りていきます。
(【2011/12/7 追記】 他にも同等の機能を提供する CPAN モジュール watcher - watch the file updates - metacpan.org を教えて頂きました。ありがとうございます!)
今回の実証は Ubuntu 11.10 で行っています。他の環境の方は適宜読み替えて実行してください。また、既に Ruby の環境がある方は、後者のコマンドを実行するだけで大丈夫です。
インストール後、自動でテストを実行したいファイル群のディレクトリのトップに次のファイルを置きます。ファイル名は "watchr.rb" としてください。
そしてテストファイル用ディレクトリである t/ にテストファイルを配置し、その他の場所にテスト以外のファイルを作成するようにします。なお、監視対象ファイルは *.pl, *.pm, *.t としています。
テストファイルを作成したら、先ほどのファイルを配置したテストしたいファイル群のディレクトリのトップで、以下のコマンドを実行します。
これで、先に作成したテストファイルの監視が始まり、変更がある度に t/ ディレクトリの中にあるテストが実行されます。このターミナルの画面は残したまま、コードの編集を行ってください。
コードに変更があった場合、Ubuntu ならテストの実行結果を以下のように通知してくれますので、テストの結果を逐一確認する必要もありません。Mac でも Growl を通して通知されるはずです。今回対応はしませんでしたが、Windows で Growl for Windows にも対応させることは簡単です。
新しくプロダクトやテストのファイルを作成した際には watchr を再起動しなければいけないのが玉に瑕ですが、ファイルが整ってくるとより快適にテストが出来るようになります。
この watchr を用いる手法の良いところは、watchr の中身は Ruby スクリプトなので、拡張が自由自在と言うことです。どのようなファイルを監視することも出来ますし、通知をもっとカラフルに、画像を使うようにするなど、監視中にどのようなコマンドも実行出来ます。
是非、自分にとって使いやすい環境に改造し快適なTDD環境を作ってください。
最後に、Perl はその CPAN エコシステム上、モジュールが結構細かく分割されていますので、必要なモジュールが細かく分かれていたり、似たようなモジュールがたくさんあって迷ったりすると思います。なので私的に使ったモジュールを箇条書きで記載しておきます。選別の参考にして頂ければ。
- Test::More (最も有名で機能もそこそこ備わっているテスティングフレームワーク)
- Test::Harness (テストランナー等)
- Test::Exceptions (例外や die のテスト)
- Test::Mock::Guard (モック)
- DBD::Mock (DBモック)
さて、私は以前 TDDBC Tokyo 1.7 for PHP という TDDBC のイベントを主催したことがあります。PHP 界隈での TDD への関心の高まりから言語縛りで行ったものです。これも含め、TDDBC Tokyo 1.5 から 2.0 まで首都圏で TDDBC が立て続けに行われたことも有り、TDD を体験したいのに体験したことがないという方も少なくなってきたかと思っていたのですが、一部からは次はまだかという声も頂いています。そこで、まだ内容、開催方法など現実的な話は何もしていないのですが、また開催出来れば良いなと考えております。
そして、それとは別に、TDDBC Tokyo 1.5 主催である @HIROCASTER と相談しているところなのですが、TDD Boot Cump の次の段階、もっと現実的に TDD するために必要な技術を教え合う TDD Boost Cump ができれば良いなという話をしています。こちらも実現するかどうかも分からないのですが、こうやって言っておくことで皆さんの協力も得られればと思っております。よろしくお願いいたします!
次は bleis さんの TDD の基礎体力と、TDD に対する想い - 予定は未定Blog版 です!