開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. CMS >
  4. baserCMS >
  5. baserCMSプラグイン開発時のユニットテストの始め方
baserCMSプラグイン開発時のユニットテストの始め方

baserCMSプラグイン開発時のユニットテストの始め方

こんにちは、ナカエです。

最近、baserCMSのプラグイン第二弾を開発しています。 カスタムフィールド系のプラグインです。 JavaScriptをゴリゴリと書いていた前回とは違い、今回はPHPメインなので素直にCakePHPのテストフレームワークを使っています。

以下にbaserCMSにおけるプラグインのテストの始め方について書き留めておきます。

テストを有効にする設定

CakePHPのテストフレームワークの利用方法に準じます。

1.PHPUnitのインストール

pear upgrade PEAR
pear config-set auto_discover 1
pear install pear.phpunit.de/PHPUnit-3.7.32

(環境によってはsudoが必要ですが省いています)

Pearを用いて導入します。 PHPUnit4系とCakePHP2系は互換性がないとのことなので、3系を指定します。

2.テスト用データベースのセットアップ(設定確認)

baserCMSではインストールの際にテスト用のデータベース設定も用意されます。 下記は公式のVagrant boxを利用した場合の例です。 利用するデータベースは同じですが、プレフィックスがtest_になっています。 このままで問題なければ飛ばしてOKです。

app/Config/database.php

public $test = array(
    'datasource' => 'Database/BcMysql',
    'persistent' => false,
    'host' => 'localhost',
    'port' => '3306',
    'login' => 'root',
    'password' => 'root',
    'database' => 'basercms',
    'schema' => '',
    'prefix' => 'test_',
    'encoding' => 'utf8'
);

3.デバッグモードを1以上にする

デバッグモードがオフの場合、ブラウザからWebランナーにアクセスできません。 管理画面から、もしくはapp/Config/install.phpの設定を直接いじってデバッグモードをオンにします。

4.スマートURLをオンにしておく

スマートURLオフの状態だとアセットが読み込まれず表示が崩れる場合があるようなのでオンにしておくと良いと思います。

Webランナーにアクセスしてテスト

http://example.com/test.phpにアクセスします。 テストの一覧が表示されるので、テストしたいものをクリックして選ぶだけで実行できます。簡単ですね。

例)Mailプラグインのテスト

試しに、baserCMSコアに含まれるMailプラグインのテストを実行してみましょう。 

baser_mail_test.png

実行結果

baser_mail_test2.png
 テスト成功ですね。

プラグインのテスト用のディレクトリの構造

App/Plugin以下にMyPluginNameというディレクトリを作成し、プラグインの開発を始めるとします。

そのディレクトリ以下にTestディレクトリ、Testディレクトリ以下にテストケースを格納するCase、そしてフィクスチャを利用する場合はFixtureディレクトリを用意します。

MyPluginName
   └Test
     ├Case
     │ └xxxxxTest.php
     └Fixture
       └xxxxxFixture.php

あとはCakePHPとPHPUnitの流儀に従いテストケースとフィクスチャを書くだけです。

Test用ディレクトリを作成すると、Webランナーでは左メニューのPluginsの中にあなたのプラグインの名前が並びます。 こちらをクリックして同様にテストを実行できます。

テストケースの例

自作クラスを読み込んでテストケースを書いていきます。

app/Plugin/FlexContents/Test/Case/FieldValidationTest.php

<?php

App::uses('FieldValidation', 'FlexContents.Model/Field/Validator');

class FieldValidationTest extends CakeTestCase {

    public function setUp() {
        parent::setUp();
        ・・・
    }

    /**
     * @dataProvider integerDataProvider
     */
    public function testInteger($data, $expect) {
        $this->assertSame($expect, FieldValidation::integer($data));
    }
    
    public function integerDataProvider() {
        return array(
            array('1', true),
            array('0', true),
            array('abc', false)
        );
    }

参考ページ

テスト全般についてはとても書きつくせないのでCakePHPのCookbookを参照してください。

それでは今回はこの辺で。

TOPに戻る