ユニットテスト

FuelPHPは自動ユニットテストの考えから構築されています。それはPHPUnit のテストフレームワークに基づいて、テストとテストクラスを含んでいます。

ユニットテストとは?

ユニットテストは、コード単位(一般的には関数またはメソッド単位)で確認するために書かれた自動化されたテストです。 コード単位は、何をするために動くのかが設計されているものです。 これらのテストは開発者がシステムに対して行った変更が、すでに働いている何かを壊さないことを確認するために役立ちます。 ユニットテストの存在はテスト駆動開発(TDD)の原動力です。

PHPUnit

FuelPHPでテストを実行する、もしくはOilを使ってテストを実行する場合、PHPUnitをインストールする必要があります。 まだPHPUnitがインストールしていない場合は, PHPUnitのインストールマニュアルを参照してください。
http://www.phpunit.de/manual/current/en/installation.html

あなたがFuelPHPでユニットテストを実行することに興味がない場合は、PHPUnitをインストールする必要はありません。

ユニットテストの実行

FuelPHPに含まれているコマンドラインユーティリティOilはあなたのユニットテストを実行するように、構成されています。 あなたはOilを使用してコマンドラインからFuelPHPプロジェクト内のすべてのテストを実行することができます。

$ php oil test

Tests Running...This may take a few moments.
PHPUnit 3.6.10 by Sebastian Bergmann.

Configuration read from /home/user/sites/example/fuel/core/phpunit.xml

...............................................................  63 / 251 ( 25%)
............................................................... 126 / 251 ( 50%)
............................................................... 189 / 251 ( 75%)
..............................................................

Time: 6 seconds, Memory: 22.25Mb

OK (251 tests, 206 assertions)

ユニットテストの作成

FuelPHPでは、テストは fuel/app/tests とそのサブディレクトリに格納されています。 もしそのディレクトリが無い場合、先に行くと作成をします。 慣例によりFuel/app/testsのテストファイルは、テストクラスとしてfuel/app/classesと同じサブパスに配置されます。つまり fuel/app/classes/model/login.phpのテストファイルはfuel/app/tests/model/login.phpとなります。

テストは、TestCase classを継承します。 TestCaseクラスは、PHPUnitのPHPUnit_Framework_TestCaseクラスのFuelPHPの拡張なので、すべての通常のPHPUnitのアサーションとメソッドテストでを使用することができます。 慣例により、テストクラスの名前は、test_で始まります。また、テストにちなんで命名されるため、Model_LoginクラスのテストはTest_Model_Loginという名前になるべきです。

class Test_Model_Login extends TestCase
{
	public function test_foo()
	{
	}
}

テストを書く事についてのさらなる情報は、PHPUnitのドキュメントから見つける事ができます。http://www.phpunit.de/manual/current/ja/writing-tests-for-phpunit.html

テストグループ

あなたは、開発時のテストのサブセットのみを実行する場合, テストグループを使用することができます。 Run php oil test with the --group= command switch.

$ php oil test --group=App

このコマンドは、グループ'APP'のテストのみを実行します。 あなたのdocblock属性のグループを使用して1つまたは複数のテストグループにテストクラスを割り当てることができます。

/**
 * @group App
 * @group Login
 */
class Test_Model_Login extends TestCase
{
	public function test_foo()
	{
	}
}

高度な設定

phpunit.xmlファイルの内容をカスタマイズする必要がある場合, fuel/core/phpunit.xml into the fuel/appフォルダをコピーします。 FuelPHPはfuel/coreの代わりに新しい設定ファイルを認識します。

モジュールのユニットテスト

FuelPHPで大規模なシステムを開発する場合, モジュールで開発をする事をおすすめします。. ただし、モジュールのパスが設定されているので、モジュールのパスが認識されるので、実行されるテストのためにはphpunit.xmlで設定する必要があります。 たとえば, fuel/app/modules内でモジュールの開発を行う場合、あなたのPHPUnitの設定にこのテストスイートを追加する必要があります。

<testsuite name="modules">
    <directory suffix=".php">../app/modules/*/tests</directory>
</testsuite>

fuel/ ディレクトリをリネームした場合のテスト

もし、fuel フォルダの名前を変更した場合は、phpunit.xmlファイルに設定されているシステム変数(ドキュメントルート、コアのパスなど)がダメな参照になっています。 While changes to the paths in the Oil script in your root will help with the other Oil commands, PHPUnit loads its own environment, so a renamed fuel directory will break testing. Oilへのパスの変更は、他のOilコマンドはそれを助けますが、PHPUnitは、独自の環境をロードします。そのため名前を変更したFuelディレクトリはテストを中断します。 この問題を解決するために app/にphpunit.xmlをコピーし、新しいファイル構造を反映するようにサーバー変数のパスを編集更新します。