社長BLOG
OpenPNEテストの近代化
- 2012-11-16 (金)
- 社長BLOG
もともとガラケー用から始まっているOpenPNE。
そもそもガラケーは近代的なテストに向かず、泥臭い手動テストばかりしていた。
当時はそれが必要だった。
でも今は違う。貧弱バラバラなガラケーのブラウザから、
携帯用のブラウザはiOS SafariかAndroid Chromeに統一された。JavaScriptも使えるようになった。
OpenPNEもコードサイズが数万行増えている。
新技術の取り込みについては保守的なOpenPNEでも、コジャレたAJAX UIなんていうのも使うようになった。
いよいよ近代化しないと、テストの沼に足を取られ始めた。
まずプラグインから
進歩レベルで言えば、まだまだ石器時代。いまようやく石斧から鉄斧になったぐらいだが、ここから近代化するよ。
OpenPNE3.8用に開発しているプラグインについて、はじめから近代的テストを導入することにした。
チームの熟練度が上がってきたら、OpenPNE本体にも適用する。
※phpMatsuri2012 @ryuzeeさんの発表は刺激になりました!とても勉強になった。
Model拡張のテスト
メンバーのプロフィールや設定を読み書きする部分など、Model部分への拡張はsymfony1.4 のlimeでテストする。
すでにテストケースは存在するが、定常的に運用する形になっていないので、これをCIと連動させるところまでやる。
JSON APIのテスト
OpenPNE3.8からほとんどの操作をJSON API経由で実現するようにしている。APIのテストは比較的やりやすい。
近代化はここから進める。テストをなるべく書きやすくするため、あえてsymfonyを使わず、記述、確認が簡単なJavaScriptベースのQUnitを使っている。(これやると、反対にCI作るのが大変になるんだけどね。)
UI のテスト
AJAXをガンガン使っているUIは、手動テストになりやすいんだけど、ここもなるべくQUnitを使ってテストするようにしている。
UIコンポーネントだけをテストするために、本物のJSON APIは使わず、APIのモックをMockJaxで作って擬似通信したことにしている。
ブラウザーテスト
OpenPNEにはSeleniumベースのブラウザテストが有るのだが、やや古いし設計でまずい部分がある。これも再構築したい。
ただ手順的には、上3つの単体テストの整備が終わってから取り掛かるというのが正しい道だろう。
ということで、しばらく後回しにする。