CakePHP1.2でbakeしている人のための簡単SimpleTest その1
CakePHP1.2 RC2で試しました。
SimpleTestの題材となるcakeアプリはなんでも良いのですが、
bakeで作ると、コントローラー、fixtureを使ったモデルのテストのスケルトンまで作ってくれるので、楽だよね
、という趣旨のエントリーなので、bakeしたアプリを用意しているという前提で書きます。
私は、改めてbakeするのが、面倒なので、【CakePHP】OpenIDをAuthComponentにトッピングしてみるで作成した(bake した)を使いました。
1.SimpleTestのインストール
SimpleTestはcake本体には当然同梱されてないため、自分でダウンロードします。
![]()
http://simpletest.org/en/download.html
(Eclipseプラグインにwktk)
app/vendorsもしくは、ルートのvendorsに解凍したものを設置すればよいのですが、
TechnoteさんのCakeにTestがやってきたによると
ルートのvendorsがイイらしいので、それで行きます(アプリ増えても1回作業で済む)
ちなみに2008/6/16現在、SimpleTestのバージョンはV1.0.1
http://ドメイン/test.phpにアクセスすると、無事に表示
![]()
ここでAll testsとかやるとしばらく返ってこないので注意(←私)
2.テストケースのスケルトンは作らなくてもOK
ここから、実際にテストケースをつくるわけですが、
bakeで、アプリのスケルトンを作ると、
テストのスケルトンまで作られています。
問答無用で・・・。
(以前は、テストのスケルトン作るって聞かれた気がしたけど)
fixtureのスケルトンもセットで、作成されています。
モデルは、app/test/cases/modelsにモデル名.test.phpで作成されます
例えばuser.test.phpの中身
<?php
App::import('Model', 'User');
class TestUser extends User {
var $cacheSources = false;
var $useDbConfig = 'test_suite';
}
class UserTestCase extends CakeTestCase {
var $User = null;
var $fixtures = array('app.user');
function start() {
parent::start();
$this->User = new TestUser();
}
function testUserInstance() {
$this->assertTrue(is_a($this->User, 'User'));
}
function testUserFind() {
$results = $this->User->recursive = -1;
$results = $this->User->find('first');
$this->assertTrue(!empty($results));
$expected = array('User' => array(
'id' => 1,
'username' => 'Lorem ipsum dolor sit amet',
'password' => 'Lorem ipsum dolor sit amet',
'flag' => 1,
'created' => '2008-06-17 19:41:18',
'modified' => '2008-06-17 19:41:18'
));
$this->assertEqual($results, $expected);
}
}
?>
コントローラーは、app/test/cases/controllersにコントローラー名.test.phpで作成されます
例えばusers_controller.test.phpの中身
<?php
App::import('Controller', 'Users');
class TestUsers extends UsersController {
var $autoRender = false;
}
class UsersControllerTest extends CakeTestCase {
var $Users = null;
function setUp() {
$this->Users = new TestUsers();
}
function testUsersControllerInstance() {
$this->assertTrue(is_a($this->Users, 'UsersController'));
}
function tearDown() {
unset($this->Users);
}
}
?>
fixtureは、app/test/cases/fixturesにモデル名_fixture.phpで作成されます
例えば、user_fixture.phpの中身
<?php
class UserFixture extends CakeTestFixture {
var $name = 'User';
var $table = 'users';
var $fields = array(
'id' => array('type'=>'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'),
'username' => array('type'=>'string', 'null' => false, 'length' => 50),
'password' => array('type'=>'string', 'null' => false, 'length' => 100),
'flag' => array('type'=>'integer', 'null' => false, 'length' => 1),
'created' => array('type'=>'datetime', 'null' => false),
'modified' => array('type'=>'datetime', 'null' => false),
'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1))
);
var $records = array(array(
'id' => 1,
'username' => 'Lorem ipsum dolor sit amet',
'password' => 'Lorem ipsum dolor sit amet',
'flag' => 1,
'created' => '2008-06-17 19:41:18',
'modified' => '2008-06-17 19:41:18'
));
}
?>
3.スケルトンのテストケースを動かしてみる
http://ドメイン/test.phpから、AppのTest Casesをクリック
![]()
モデルのテストの結果が表示されます。まだ、何もカスタマイズしていないので、当然テストをクリアして緑色なのですが、注目すべきは、発行されたSQLです。
テスト用のテーブル(test_suite_users)を作成して、fixtureに書かれたデータをinsertして、findした結果を比べています(users_controller.test.phpにそう書いてあるからですが・・・)。
![]()
こちらはコントローラーのテスト結果。users_controller.test.phpにほとんど何も書いていないので、シンプル。下図はShow Passesをクリックして表示させた例
![]()
次のエントリーでスケルトンをカスタマイズしたり、fixtureで本番用のDBからデータをテスト用のDBにコピーしたり、実用的なテストをしたいと思います
関連エントリ
CakePHPでSimpleTest その2 TestSuiteの動きをモデルのテストケースのスケルトンで確認
CakePHPでSimpleTest その3 モデルのテストケース作成
参考にさせて頂いたエントリ
http://book.cakephp.org/ja/view/160/testing
http://my.opera.com/sizuhiko/blog/2008/06/28/cake-test
http://www.straighten.jp/p/6
Popularity: 42 %
by redgasuki 











コメントはまだありません。