CakePHPのユニットテスト : CakePHP

Pocket

CakePHPのユニットテストのメモ。

テスト実行

  • ブラウザ
  • コマンド

ブラウザ

ホストのIPを192.168.33.10に設定している場合の例。

http://192.168.33.10/test.php

コマンド

$ Console/cake test [options] [<category>] [<file>]

(例1) アプリケーションのテスト

$ Console/cake test app

アプリケーションの作成済みテスト一覧が下記のように表示されるので選択して実行する。

App Test Cases:
[1] AllTests
[2] Controller/ExampleController
[3] Model/Example
......

(例2) Test/Model/ExampleTest.phpの実行

$ Console/cake test app Model/Example

Modelのテスト例

Exampleモデルのsomeメソッドをテストは下記のようになる。

フォルダ構成

app
|
|.....
|
|-- Model
    |
    |-- Example.php
|
|.....
|
|-- Test
    |
    |-- Case
        |
        |-- Model
             |
             |-- ExampleTest.php
    |
    |-- Fixture
        |
        |.....
        |-- ExampleFixture.php
        |

Exampleモデル

// Model/Example.php
<?php
App::uses( 'AppModel', 'Model' );

/**
 * Example Model
 *
 */
class Example extends AppModel {

    /**
     * name
     *
     * @var
     */
    public $name = 'Example';

   ..... 
   .....

    /**
     * some
     */
    public function some() {
        ..... 
        return $value
    }
}

Exampleモデルのテスト(ExampleTest.php)

// Test/Case/Model/ExampleTest.php
<?php
App::uses( 'Example', 'Model' );

/**
 * Example Test Case
 *
 */
class ExampleTest extends CakeTestCase {

    /**
     * Fixtures
     *
     * @var array
     */
    public $fixtures = array(
        'app.example' // --- (1)
    );

    /**
     * setUp method
     *
     * @return void
     */
    public function setUp() {
        parent::setUp();
        $this->Example = ClassRegistry::init( 'Example' );
    }

    public function testメソッドsomeの何らかのテスト() {
        $this->assertEquals( 'expect value', $this->Example->some() );
    }

    /**
     * tearDown method
     *
     * @return void
     */
    public function tearDown() {
        unset( $this->Example );

        parent::tearDown();
    }

}

フィクスチャの指定(1)はTest/Fixture/ExampleFixture.phpを参照する。
ExampleFixture.phpはテストで使うテーブル定義とレコード(テストデータ)を定義している。

フィクスチャ ExampleFixture.php

database.phpの$defaultで指定したデータベースのデータを使う場合のフィクスチャの例。

<?php
/**
 * ExampleFixture
 *
 */
class ExampleFixture extends CakeTestFixture {

    /**
     * Import
     *
     * @var array
     */
    public $import = array('model' => 'Example', 'records' => true);

}

Fixtureはbakeコマンドでインタラクティブに作成できる。

$ Console/cake bake

テストの度にフィクスチャで指定したテーブルとレコードがdatabase.phpの$testで指定したデータベースに作成されテストが終わると破棄される。

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。