Cake に Test がやってきた ~  Test でみんな Happy になろう ~ CakePHP  勉強会 Ⅲ 
岸田 健一郎 永和システムマネジメント所属、オブジェクト倶楽部 自称デザエンジニア   Des ign   +  E ngi neer   =  Desingineer PHP/JavaScript/ActionScript/HTML/CSS などなど CakePHP  勉強会 Ⅲ 
マイコミから絶賛発売中。 よろしくお願いします。 CakePHP  勉強会 Ⅲ 
突然ですが 何色が好きですか? CakePHP  勉強会 Ⅲ 
個人的には 赤 が好き CakePHP  勉強会 Ⅲ 
携帯電話も 赤 CakePHP  勉強会 Ⅲ 
財布も 赤 CakePHP  勉強会 Ⅲ 
車も 赤 CakePHP  勉強会 Ⅲ 
イチゴ が好き CakePHP  勉強会 Ⅲ 
サクランボ が好き CakePHP  勉強会 Ⅲ 
ブラウザも 赤 CakePHP  勉強会 Ⅲ 
テスト結果は ? CakePHP  勉強会 Ⅲ 
緑 に限る CakePHP  勉強会 Ⅲ 
Test 書いてますか  !? CakePHP  勉強会 Ⅲ 
Test があれば 何でもできる CakePHP  勉強会 Ⅲ 
とまでは 言いません CakePHP  勉強会 Ⅲ 
書くと 幸せになれる CakePHP  勉強会 Ⅲ 
自分以外も 幸せ CakePHP  勉強会 Ⅲ 
Agile 繰り返し プロトタイピング CakePHP  勉強会 Ⅲ 
CakePHP  勉強会 Ⅲ 
詳しくは CakePHP  勉強会 Ⅲ  和田卓人のテスト駆動開発講座
CakePHP で Test CakePHP  勉強会 Ⅲ 
1.1 でも できたよね? CakePHP  勉強会 Ⅲ 
正解 CakePHP  勉強会 Ⅲ 
でも正直 CakePHP  勉強会 Ⅲ 
書き方 わからず orz CakePHP  勉強会 Ⅲ 
なんとなく Simple Test CakePHP  勉強会 Ⅲ 
1.2 になって CakePHP  勉強会 Ⅲ 
cake/tests 同梱 CakePHP  勉強会 Ⅲ 
cake 本体の テストコードで CakePHP  勉強会 Ⅲ 
理解度 急上昇 CakePHP  勉強会 Ⅲ 
CakePHP で Test するには CakePHP  勉強会 Ⅲ 
Simple Test インストール TestCase の記述 テスト実行 CakePHP  勉強会 Ⅲ 
Simple Test のインストール CakePHP  勉強会 Ⅲ  http://simpletest.org/ ← ダウンロード
CakePHP  勉強会 Ⅲ  大事なこと その2 夏~秋ごろテストまとめ本が マイコミから出ます。 ?
Simple Test のインストール CakePHP  勉強会 Ⅲ  app cake vendors simpletest  ここが オススメ docs extensions test
Test Case を書く場所 CakePHP  勉強会 Ⅲ  app tests behaviors components  … ..  など cake vendors
Test Case の記述 CakePHP  勉強会 Ⅲ  http://book.cakephp.org/view/160/testing  詳しくは時間がないのでコチラで・・・ 
テストデータ入れるのに テスト前に SQL 流してました ・・・ そんなあなた! CakePHP  勉強会 Ⅲ 
Cake1.2 では fixture を使うと CakePHP  勉強会 Ⅲ 
勝手に テストデータを 準備してくれる CakePHP  勉強会 Ⅲ 
test_suite_ テーブル使うので 元データに影響なし CakePHP  勉強会 Ⅲ 
test_suite_ テーブルの準備 CakePHP  勉強会 Ⅲ  CREATE TABLE  ` test_suite_posts ` ( `id`  int  NOT NULL  auto_increment, `title` varchar(50)  NOT NULL , `body`  text  NOT NULL , `created` datetime default  NULL , `updated` datetime default  NULL , PRIMARY KEY   (`id`) );
fixture クラスの作成 CakePHP  勉強会 Ⅲ  class PostTestFixture extends CakeTestFixture { // [ 注意 ] クラスでなくモデル var $name = ‘Post’;   var $import = array('model'=>‘Post'); var $records = array(array( 'id'  => 1, ‘ title’  => ‘CakePHP 勉強会3に参加’ , ‘ body'  => ‘’ ),  );
現時点では、忘れずに・・・ CakePHP  勉強会 Ⅲ  class PostTestFixture extends CakeTestFixture { … .. function create() { return false; } function drop() { return false; } } Ticket があったので、修正中のようです。
その他もありましたが、 rev. 7195 で直ってます CakePHP  勉強会 Ⅲ 
fixture の使い方 CakePHP  勉強会 Ⅲ  class PostTest extends Post { var $useDbConfig = 'test_suite'; } class PostTestCase extends CakeTestCase { var $fixtures = array(‘post_test'); var $TestObject = null; function setUp() { $this->TestObject = new PostTest(); } function testValidate エラーなし () {
fixture の insert/truncate CakePHP  勉強会 Ⅲ  class PostTestCase extends CakeTestCase { function test 非公開にする () { ………… } function test 公開されている記事だけ () { ………… } テストデータ  INSERT  テストデータ  TRUNCATE テストデータ  INSERT テストデータ  TRUNCATE
固定データの fixture クラス これで、 roles テーブルから、 test_suite_roles テーブルにデータが全てコピーされます。 CakePHP  勉強会 Ⅲ  class RoleFixture extends CakeTestFixture {  var $name = 'Role';  var $import = array('table'=>'roles',    'records' => true ); }
Model Component Helper CakePHP  勉強会 Ⅲ  テストしやすいところ Validation の確認 _beforeXX などオーバライドの挙動確認 独自ロジックの確認 ビジネスロジックの確認 出力されるタグの確認
Controller CakePHP  勉強会 Ⅲ  テストしにくいところ 何を評価しますか? set した値とか、 render した HTML とか確認 できますが。。
acl とか ログインとか セッションとか CakePHP  勉強会 Ⅲ 
依存関係が 多すぎて 大変 CakePHP  勉強会 Ⅲ 
action には ロジックを 書かないのが吉 CakePHP  勉強会 Ⅲ 
再利用可能で 重要なロジックは Component CakePHP  勉強会 Ⅲ 
ただし $this->Controller への依存関係は 極力書かない CakePHP  勉強会 Ⅲ 
でもやっぱり Test 書きたい CakePHP  勉強会 Ⅲ 
Ajax WebAPI テストしたい CakePHP  勉強会 Ⅲ 
それなら MockObject 使いましょう CakePHP  勉強会 Ⅲ 
MockObject の使い方 CakePHP  勉強会 Ⅲ  class UsersControllerTestCase  extends CakeTestCase { function setUp() { Mock::generate ('LoginComponent'); $this->Login =   &new  MockLoginComponent(); } function  startController (&$controller,   $params) { $controller->Login =   $this->Login; }
MockObject の使い方 CakePHP  勉強会 Ⅲ  class UsersControllerTestCase  extends CakeTestCase { function test ログインしているユーザ名を取得 () { $this->Login->setReturnValue ( ‘ getLoginName', ‘ 岸田健一郎’ ); $result = $this->testAction( '/api/users/1/name', array('return'=>'render')); $this->assertEqual( ‘ 岸田健一郎’ , $result );
デモ CakePHP  勉強会 Ⅲ 
応用事例: Ticket で活用 CakePHP  勉強会 Ⅲ 
某月某日 Cake の bug を 発見! CakePHP  勉強会 Ⅲ 
英語 自信なし ・・・ CakePHP  勉強会 Ⅲ 
そんな時は 失敗する テストコード添付 CakePHP  勉強会 Ⅲ 
タイトル 「このテストが失敗するよ」 ※ 英語にしましょう CakePHP  勉強会 Ⅲ 
再現 重要 CakePHP  勉強会 Ⅲ 
貢献できたら 嬉しい CakePHP  勉強会 Ⅲ 
自分以外も 幸せ CakePHP  勉強会 Ⅲ 
Test で みんな Happy に CakePHP  勉強会 Ⅲ 
CakePHP  勉強会 Ⅲ  大事なこと その3 CakePHP 1.2 書籍の「 企画 」あり。 興味ある方、ご協力いただける方 連絡ください。 ?
ご清聴ありがとうございました CakePHP  勉強会 Ⅲ 

CakeにTestがやってきた