UnitTestでゴメンナサイ実装。
最近くだらない事ばかり書いてますが、裏では悶絶しながらcfneoの開発を急ピッチで開発してます。
(SeasarConference2008Autumnで資料を公開したにも関わらず、まだリリースできてませんごめんなさい><)
で、実はcfneo version0.01の目玉として作り込んでおりますCfneoUnitという機能がありまして、今回のエントリではこれを紹介するついでにゴメンナサイって書いておこうと。
まずこのイメージですが、見たとおりブラウザです。
ColdFusionはブラウザからしか実行できない(ちょっとしたプログラムにHTTPでアクセスさせても良いですが)という腐った仕様があるので、開き直ってテストはブラウザを使ってやる事を前提に、cfneoのUnitTestへのアプローチを組み立てています。
で、この画像のLink列に[Create Test driver file.]がいっぱいあります。
このリンク先はイベント・ハンドラになってまして、URLの最後にターゲットになるTestDriverのパスをくっつけてます。(これが第一のごめんなさい)このリンク先に飛ぶと、ターゲットとして指定したTestDriverとなるcfmファイルを生成して、この一覧画面に戻ってきます。
ブラウザ上でコードを書き込めるようになれば、完全にブラウザ上でUnitTest(および部分的な結合まで)が可能になるのですが、まだそこまで手が回らないのでここで生成されたTestDriverをwwwrootの中から探して、そのファイルにテストを書き込んでいくという手順になるです。(これが第二のゴメンナサイ)
また、二つ目の画像では、Link列の中にもうひとつTableが存在し、そのTableのTested列にtrueとfalseが並んでいます。trueはそのメソッドに対するテストが作成済であり、falseはそのメソッドに対するテストが書かれていない、という意味です。
仕組みは単純な文字列検索で、がTestDriver内に記述されているかどうかを見ています。第三のゴメンナサイですね。一応TestDriverのテストは以下のようなコードに書くようにしてます(TemplateはSnippetsとしてリポジトリ上にあります)
<fieldset> <legend></legend> <table> <tr> <th>caseNo</th> <th>note</th> <th>input</th> <th>expected</th> <th>actual</th> <th>result</th> </tr> </table> </fieldset>
この画像の場合だと、[/cfneo/appcore/facade/TestDriverFacade.cfc]のTestDriverとなる[/cfneo/dev/test/appcore/facade/TestDriverfacadeTest.cfm]のメソッド[createTestDriver]に対するテストがないぞ、という事です。
この機能の課題は、以下だと認識してます。(全部僕がこのcfneoのフレームワークを実装しながら感じた点ですね)
- テストの実施結果も一覧画面で見たいな。
- ブラウザからテストが書ければ楽なのに。
- 縦長で見づらいので、サマリくらい出せばいいのに。
- itengineer爆発しろ。
逆に利点は、Javaのような静的言語と違って、ファイルを作る・更新する→即反映というLightweightLanguageなトコですね。リポジトリからUpdateしてきたコードを即テスト可能っていうのは、LLで継続的インテグレーションをやろうとする為の可能性なんじゃないかな、と。