CakePHPでユニットテストする場合、標準ではPHPUnitではなくSimpleTestを使う。
1. ダウンロード
SimpleTestはDownloading SimpleTestからtar.gzをダウンロードできる。
(なぜかSoureceForgeの方からはtar.gzがダウンロードできなかった。どうでもいいが上記のページには"... from SourceForget.net ..."と書いてある。ソースのことなど忘れたい...とか?)
2. セットアップ
基本的にCakePHP1.2の本家のリファレンスに沿って進めればセットアップできる。
3. setUp, tearDown
SimpleTestではxUnitと同様にsetUp() tearDown()が使えて、さらにそれに加えていろいろなタイミングで呼ばれるfunctionがあるらしい。
参考:CakePHPでSimpleTest その2 TestSuiteの動きをモデルのテストケースのスケルトンで確認 | ねねとまつの小部屋
<?php
//app/tests/cases/models/member.test.phpの例
App::import('Model', 'Member');
class MemberTestCase extends CakeTestCase {
function setUp() {
$this->Member =& ClassRegistry::init('Member');
}
function testHoge() {
$result = $this->Member->hoge('foo');
$expected = array('baz' => 'bar');
$this->assertIdentical($result, $expected);
}
}
4. assert
assertEqual()は"=="で比較するので危険らしい。常にassertIdentical()を使った方が良さそうだ。
5. Caverrage
"Analyze Code Coverage"を見るにはxdebugが必要らしい。
6. Controllerのテスト
$this->testAction()が使える
<?php
class MembersControllerTest extends CakeTestCase {
function startCase() {
echo '<h1>テストケースを開始します</h1>';
}
function endCase() {
echo '<h1>テストケースを終了します</h1>';
}
function startTest($method) {
echo '<h3>メソッド「' . $method . '」を開始します</h3>';
}
function endTest($method) {
echo '<hr />';
}
//普通に呼び出す
function testIndex() {
$result = $this->testAction('/');
}
//レンダリングしたHTMLを取得する
function testIndexGetRenderedHtml() {
$result = $this->testAction('/', array('return' => 'render'));
//表示して確認
debug(htmlentities($result));
}
//コントローラ内でセットしたデータを取得する
function testIndexGetViewVars() {
$result = $this->testAction('/', array('return' => 'vars'));
$this->assertIdentical($result['fuga'], 'honyarara');
//表示して確認
debug($result);
}
}
参考:コントローラのテスト :: テスト(Testing) :: CakePHPによる作業の定石 :: マニュアル :: 1.2 Collection :: The Cookbook
0 件のコメント:
コメントを投稿