PHPでもテストを書きたい。

 rhacoアプリ開発日誌 - 逆引きrhaco(?)18:doctestを使う
 ウノウラボ Unoh Labs: PHPでDocTest

 SimpleTest - Unit Testing for PHP

 Test::More - テストスクリプトのためのフレームワーク

 昨年末に取り組んでいたPerlでの開発では、Test::Moreモジュールを使って簡単なテストスクリプトをでっち上げて、絶えず確認しながら作業を進めておりました。そしてそれが思いのほか楽しかったり安心感を与えてくれりしてすこぶる気に入ってしまいまして、「テスト書かないなんてないわー」とか躊躇する事なく言い放つ様な有様であります。
 そんな私が今取り組んでいるモノはPHP。公私ともに何度となく取り組んでおりますが、私的にちょいちょい訪れる空前のブームが未だかつて訪れた事のない言語、PHPであります。PHPでもテストを書きたい、書かずにいられない。

 という事で、以前少し調べて試した事のあるSimpleTestでやろうと思ったものの、どうにも心に引っかかる一つのキーワード、doctest。というのも、次あたりまたPythonにも帰りたいと願ったり願わなかったりしてますし(←Pythonさんはdoctest標準装備です)、私的に超フェイバリットといいますか、勝手に応援してるぜフレームワークrhacoにも取り入れられているからなのですよね。
 でも実は我々(←どうして複数形なのは後でわかります)、doctestは軽く否定的だったのです。プログラム内に必要以上にコメントが入るのでさえもあまりいい気持ちがしないのに、あまつさえテストコード、プログラムまで入るなんてけしからん、汚れる、ごった煮よくない、混ぜるな危険です。分けろよきっちりと、ドキュメントとかも。
 とはいえ、気分屋でころころ変わる上に新しいもの好きの私ですから、軽い気持ちで書き始めてみたんです、rhacoでdoctest。するとですね、思った通り、「これでもいい。や、これがいいんじゃないの」とか変心。「これがベストではないかも知れないけれど、ベターではあるんじゃないかな」とか負け惜しみチックなご発言。すっかり馴染んできて、「rhacoラブだよ、doctestサイコーだよ」とかなノリです。
 しかし、話はまだこれで終わりません。書いているうちに不満とか出て来るんです。あー、これやりたい、こう書きたい、こうしたいの類い。

 まず思ったのがabstractクラスのテストもdoctestで書きたい。どうも仕組み上rhacoでは難しいっぽい(←違ってたらごめん)。なので、ここは仕方がないとテスト用のサブクラスの定義を含むSimpleTest用のテストファイルとテストケースを仕込んでテストを行い、abstractではない普通のクラスは積極的にdoctestでしのいでおりました。abstractを捨てれば全てdoctestで書けましたけども、それは本末転倒ってものであります。
 次は書式。どうせならPythonみたいに対話形式っぽく書くのもいい様な気がしました。もうちょっとボーナス要素的な機能があってもいい気がしてきました、SimpleTestにあるsetup()とか。
 みたいな話を例のあの人へネタ振りしてましたところ、やってくれました、ジェバンニ並みに一晩で。さらに継続して開発を進めてくれちゃったりしましたよ。流石だ、素晴らしい、格好いい、大好きだ。

 そんな訳で、

/**
  #test
  >>> $t = new Test();
  >>> $t->name();
  'name';
*/
function name() {
  return 'name';
}

 こんな風に書けるPHP用のdoctestモジュールが近日お目見えするかも知れません。もうみんな忘れているであろうNorfの資産、活きてます。

ーー関連記事ーー
 例のあれ(仮題)・NorfDocTest、リリースされました。