-オープンソースのSNSエンジン OpenPNEプロジェクト-

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に快適なテスト環境を作りましょう :)

ページの先頭に戻る