テスト

テストケースの規約

  1. テストを含むPHPファイルは、 tests/TestCase/[Type] ディレクトリーに置く
  2. ファイル名はFooBarTest.php とする
  3. テストを含むクラスは Cake\TestSuite\TestCase 、 Cake\TestSuite\IntegrationTestCase または \PHPUnit\Framework\TestCase を継承する
  4. 他のクラス名と同様に、テストケースのクラス名はファイル名と一致させる
  5. テストを含むメソッド (つまり、アサーションを含むメソッド) の名前は testPublished() のように test で始める。 @test というアノテーションをメソッドに マークすることでテストメソッドとすることもできる。

テストの作成

テストコードの例

ヘルパーを作成。以下のヘルパーに対するテストを作成する。

<?php
namespace App\View\Helper;

use Cake\View\Helper;

class ProgressHelper extends Helper
{
    public function bar($value)
    {
        $width = round($value / 100, 2) * 100;
        return sprintf(
            '<div class="progress-container">
                <div class="progress-bar" style="width: %s%%"></div>
            </div>', $width);
    }
}

テストコード。

<?php
namespace App\Test\TestCase\View\Helper;

use App\View\Helper\ProgressHelper;
use Cake\TestSuite\TestCase;
use Cake\View\View;

class ProgressHelperTest extends TestCase
{
    public function setUp()
    {
        parent::setUp();
        $View = new View();
        $this->Progress = new ProgressHelper($View);
    }

    public function testBar()
    {
        $result = $this->Progress->bar(90);
        $this->assertContains('width: 90%', $result);
        $this->assertContains('progress-bar', $result);

        $result = $this->Progress->bar(33.3333333);
        $this->assertContains('width: 33%', $result);
    }
}
setUp

setUpメソッドはこのテストケースクラスのメソッドが呼び出される前に毎回呼び出される。テストに必要なオブジェクトの初期化や設定を行う。

parent::setUp

TestCase::setUp() は、 Core\Configure の値をバックアップしたり、 Core\App にパスを保存したりといったいくつかの作業をしている。

アサーション

期待した結果が出力されるかどうかを検証する。assertContains()は、ヘルパーが返した値に期待した文字列が含まれているかどうかを検証する。 TestSuitePHPUnit で多数のアサーションメソッドが用意されている。