2012年8月12日日曜日

Symfonyを使った開発で機能テストはlimeかSeleniumか

Webアプリの開発をテスト駆動で行おうとするとき、機能テストを自動化するためのテスティングフレームワークの選択は重要であると思います。

lime vs. Selenium


機能テストの自動化にSymfony付属のlimeとSeleniumのどっちを使うか、と思ってたら同じ事考えてる人がいました。

http://stackoverflow.com/questions/2777913/selenium-vs-phpunit-lime

上記リンク先では用途によって使い分けるべし、という論調でたしかにその通りなのですけれど、問題は「機能テスト目的としては両方とも使えてしまう」ことです。たしかにlimeでしかできないこと・Seleniumでしかできないことはあります。しかし機能テストのほとんどの部分はどちらでもできてしまうことなので、やっぱり選択は迷うことになります。

自分の結論:lime


で、ともかく自分でやってみようということで両方使ってみました。
結果、現在のところ自分はlimeのみ使っています。その理由は、
  • 速い
  • テストが書きやすい
です。

まず実行速度は当然といえば当然ですが圧倒的にlimeの方が速いです。これはテスト駆動開発を行う上で何度もテストを実行する必要が有ることを考えると、開発効率にかなりの影響を与えます。Seleniumではブラウザで実際にアクセスするのでどうしても時間がかかります。

また、テストファーストで開発を進めるのに、limeならPHPですから条件分岐やループなどの制御構造をテストに組み込むのも全く難なく出来ます。Seleniumでは制御構造をテストに組み込むにはプラグインを導入する必要があったり、書き方もHTMLを使った独特の文法ですので若干テストが書きづらいです。(PHPUnitと連携できるみたいですが環境構築が大変。やろうとして途中でやめました。)

Javascriptのテストはどうする?


ちなみにJavascirptの単体テストにはqUnitを使っています。limeによるテストではJavascirptの機能は反映されませんので、Javascriptに依存する機能は別途qUnitでテストを行うことになります。
逆に言うとlimeによるテストがJavascirptなしでも可能になるようにコードを書く必要があります。

現状、lime+qUnitという構成で自動テストの環境はほぼ十分です。最後はブラウザから操作して確認することが必要ですが、これは自動テストに抜け漏れがなかったかを意識するとよいと思います。

0 件のコメント:

コメントを投稿