CakePHP1.2 に SimpleTest をインストール で SimpleTest をインストールするところまでやったので、今度は実際にテストケースを作成してみます。

空のテストケースを作成する

app/test/cases/models に user.test.php を作成して以下のコードで保存する。

<?php
class UserTest extends User {
}
?>


test.php にアクセスして「App Test Cases」というリンクをクリックすると作成した user.test.php というリンクが表示されます。

この models/user.test.php をクリックすると作成したテストが実行されます。まだテストケースが何もないので当然テストは正常に終了します。

テスト正常終了

User モデルのテスト

実際にモデルのテストケースを作成してみます。
app/test/cases/models に user.test.php を以下のように修正します。

<?php 

App::import('Model', 'User');

class UserTest extends User {
    var $name = "UserTest";
    var $useDbConfig = "test";
}

class UserTestCase extends CakeTestCase {
    var $TestObject = null;

    function setUp() {
        $this->TestObject = new UserTest();
    }

    function tearDown() {
        unset($this->TestObject);
    }

    function testValidate() {
        $data = array();
        $this->TestObject->create($data);
        $result = $this->TestObject->validates();
        $this->assertFalse($result);
    }
}
?>

3行目の App::import でテストするモデルのクラスを読み込みます。
5行目から8行目でモデルのクラスを継承したクラスを作成して、$useDbConfig = ‘test’ としてテスト用のデータベースを使用するようにしています。
10行目で CakeTestCase を継承したクラスを作成します。クラス名は %Hoge%TestCase にします。
13行目の setUp メソッドでテストの前処理を行います。
17行目の tearDown メソッドでテストの後処理を行います。
21行目が実際のテスト内容です。テストを行うメソッドは test%Hoge% のようなメッソド名にします。

ここでは簡単なバリデーションのテストをしてみました。空の配列をバリデーション実行した場合のテストです。User モデルでは name が必須項目になっているとすると $this->TestObject->validates() は false になります。
$this->assertFalse メソッドは 引数が false ならテストは正常と判定します。

test.php にアクセスして user.test.php を再度実行すると
1/1 test cases complete: 1 passes, 0 fails and 0 exceptions.
と表示されます。

テストに失敗すると下図のように赤い帯で表示されます。またどのテストが失敗したかも表示されます。
テスト失敗

関連する投稿