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プラグインのテストを実行してみましょう。
実行結果
プラグインのテスト用のディレクトリの構造
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を参照してください。
それでは今回はこの辺で。