UnitTest

目下、cfneoはUnitTestの仕組みを提供する事を目先の目標に開発を進めています。

今さらUnitTest?と言われそうですが、ColdFusionにはUnitTestの仕組みが実はあまり整備されていません。OSSでCFUnitというものは存在しますが、全部のテストの結果が表示されるだけなので成功してしまうとどのテストをしたのかTestDriverのコードを見ないと分かりません。(でも、これはこれで必要となるシチュエーションはあるとは思います)


なので、当初はEclipseで使うJUnitをイメージに自分なりに使い心地を追求していったものが、現時点でのcfneoです。(SVNの使い方に不慣れで、開発中のものが全部trunkに上がってしまっていますので、これは早めに整理しないとなと思ってます><)


それほどUnitTestって必要なの?とも言われるかも知れませんが(現にWeb以外では結構叩かれてるw)、仮にユーザの登録日時を書式に沿って文字列として返すFunctionを作ったとしてそのテストの為に毎度ユーザ登録をしたり、ログインしたりするとか、どんだけ暇なんだよwとか思う訳です。TestDriverに対象のFunctionをInvokeさせて、結果を機械的に判断させればすぐジャン、とか思う訳です。


となると、UnitTestはInvoke出来る単位であり、機会的に判断できるように戻り値があった方が良いです。そして、パラメータに対して常に同じ戻り値を返す作りになっていると、このUnitTestという作業は非常に意味のある有効な品質へのアプローチになります。


でも、このUnitTestもUIのテストには使えません。
一度開いた画面のHTMLをテキストで保存して、それとテストで得たHTMLを比較するといったやり方なら可能ですが、このテストにどれだけの意義があるのかという感じですね。HTML生成以外はテストし尽くして、本当に生成されたHTMLだけを確認したい場合だったり、パラメータによって内容が変わらないような画面を対象にしたなら意義が全くないとは言えませんが、レイアウトや色合いは確認できません。

なので、UIから可能な限り、それこそ本当に人間が確認するしかないところ以外を上記のUnitTestで解決していくよう設計・開発していくことがUnitTestを有効に活用していくという事なのではないか、と思います。


ColdFusionはコードが書きやすいので凝った設計をすべきではない、という意見も聞くのですが、そもそも設計とは開発の為だけではなく、テストや運用のフェイズも視野に入れてやるべきものなので(完全に作り捨てが出来るようになっていれば別ですが、それをするにも相当設計を頑張らないとダメでしょうね)、コードの書きやすさのみを優先して軽んじて良い部分ではないんです。


ということで、アプリケーションの設計まで視野に入れないと、テストは楽に出来ないんですね。