OpenPNE3プラグインに快適なテストライフを
09 / 02 水曜日 2009
OpenPNE開発チームの深町です。
先日DBコンバータの記事を書きましたが、今日はOpenPNE3プラグインの自動テストについてです。
日々はめんどくさいの連続
僕は非常に怠慢な人間です。日々めんどくさいとつぶやいています。
パジャマに着替えるのめんどくさい。
寝癖なおすのめんどくさい。
家から出るのめんどくさい。
1日3食めんどくさい。
家に帰るのめんどくさい。
寝るのめんどくさい。
生きてるってめんどくさい。
まあ別に生きてるのめんどくさい人はそう多くないと思いますが、「○○めんどくさい」と日々考えてるプログラマも多いでしょう。
めんどくさいものの代表として「テスト」がありますね。プログラムは好きだけど、テストするのはめんどくさい。うん、よく分かる。
そんな怠慢なプログラマのためにあるもの。それが「自動テスト」です。
自動テストって何?
プログラムを書くと必ずテストしますね。めんどくさくてしないときもあるけど、大体します。
コンパイルが通るかどうか。関数が予想した値を返すか。フォームが投稿できるか。データが保存されているか。レイアウトが崩れてないか。
確認することが多くてうんざりしますね。
まあそうは言っても、テストが1回限りならやるかもしれません。でも現実は違う。修正するたびにテスト、テスト、テスト。下手すると作業時間のほとんどがテストだったりします。
「あぁ、誰か代わりにテストしてくれないかな…」
こういった繰り返し作業は人間のすることじゃありません。これこそプログラムにさせればいい。
このような、テストさせるためのプログラムが「自動テスト」です。
プラグインのテスト
OpenPNE3で使われているsymfonyは自動テストに対してとても熱心です。チュートリアルのJobeetにもテストに関する章が3つあります。
幸いにも、OpenPNE3プラグインのテストも同じように書けます。
テストの準備はめんどくさい
テストを書くためにはまずtestディレクトリを作って、さらにその下にbootstrapとfixturesとunit、functionalを作って、bootstrapに初期化用のテストプログラムを書いて……。
……めんどくさい。こんなことは我々メンドクサー(造語)のすることじゃない。
めんどくさいことは自動化しよう。テストの準備もプログラムにやらせたい。
opGenerate:pluginでテストの雛形も作っちゃえ
そう思って、プラグインの作成時に一緒にテストの準備もすることにしました。
#4300 (opGenerate:pluginでtest用の雛形を生成する) – OpenPNE – Trac
以下のコマンドを打つと、
$ symfony opGenerate:plugin opSamplePlugin
以下のようなディレクトリができる。
$ ls plugins/opSamplePlugin
apps config i18n lib test
新しく追加されたtestディレクトリは以下の構造になっています。
- test/
-
- bootstrap/
-
- database.php
- functional.php
- unit.php
- fixtures/
-
- test_data.yml
- functional/
-
- mobile_frontend/
-
- skeletonActionsTest.php
- pc_frontend/
-
- skeletonActionsTest.php
- unit
-
- model/
-
- SkeletonTest.php
初期化用のbootstrapはほとんどいじる必要がありません。主に編集するのは太字で書いたファイルです。
まだ実験段階なので、skeletonという名前がついていますが、最終的にはこれも自動でsampleActionsTest.phpといった名前に変更される予定です。
テストの書き方
テストの書き方はsymfonyのドキュメントを参照してください。同じです。
読んだけどわかんないよー、って人はお気に入りのプラグインのテストを参考にするといいですよ。
これでもめんどくさいだって?
これで自動テストを書くための準備は整いました。
だけど「そもそも自動テスト書くのがめんどくさい」って人もいるかもしれません。
もし、「こうだったら自動テストを書く気にもなるのに」と思っている方がいれば言ってください。どんどんみんなで改善していきましょう。
OpenPNE3に快適なテスト環境を作りましょう :)