まだまだあけましておめでとうございます。
年始をいかがお過ごしでしょうか。
私はいつものように、日常と変わらない生活をしています。
さてさて、ユニットテストの件ですが、以前更新して随分時間が経ってしまいましたが、書いていこうかなぁと思います。
今回はバリデーションをテストするための方法を書こうと思います。
前回の routes.php に対するテストの記事は以下になります。
CakePHP2でユニットテスト 〜route.php編〜
それでは目次です。
バリデーションを適応していく
今回はUserモデルに対してnameにnotEmptyを、telに対して独自のバリデーションであるcheckNotEmptyとnumericOnlyを適応していると仮定します。
User.php
[ 'rule' => ['notEmpty'], 'message' => '名前を入力して下さい。' ], 'tel1' => [ 'notEmpty' => [ 'rule' => ['checkNotEmpty'], 'message' => '電話番号を入力して下さい。' ], 'numericOnly' => [ 'rule' => ['numericOnly'], 'message' => '数字のみ入力して下さい。' ] ] ]; public function checkNotEmpty(){ if(!empty($this->data[$this->alias]['tel1']) && !empty($this->data[$this->alias]['tel2']) && !empty($this->data[$this->alias]['tel3'])) { return true; } else { return false; } } public function numericOnly(){ // 数字のみ許可 $pattern = '/^[0-9]+$/'; $tel1 = preg_match($pattern, $this->data[$this->alias]['tel1']); $tel2 = preg_match($pattern, $this->data[$this->alias]['tel2']); $tel3 = preg_match($pattern, $this->data[$this->alias]['tel3']); if(empty($tel1) && empty($tel2) && empty($tel3)){ return true; } else { return false; } } }
こういうモデルに対してテストを書いていこうと思います。
バリデーションに対するモデルを書く
テストを書いていきます。
Test/Case/Model/UserTest.php
User = ClassRegistry::init('User'); } public function tearDown() { unset($this->User); parent::tearDown(); } public function testUserValidations(){ $baseCase = [ 'name' => '佐藤' 'tel1' => '090' 'tel2' => '0088' 'tel3' => '8800' ]; $testCases = [ true => [ ['name' => '谷'], ['tel1' => '03', 'tel2' => '1111', 'tel3' => '2222'] ], false => [ ['name' => ''], ['tel1' => ''], ['tel2' => -1] ] ]; foreach($testCases as $expected => $cases){ foreach($cases as $case){ $testCase = array_merge($baseCase, $case); $this->User->set($testCase); $result = $this->Entry->validates(); if((boolean)$expected){ $this->assertTrue($result); } else { $this->assertFalse($result); } } } } }
こんな感じでテストを書いていきます。
このやり方であればテストケースを変更するのも簡単だし、trueとfalseで固まっているのでわかりやすいかと思います。
最後に
いかがでしたでしょうか。
今回もroutes.phpのテストと同じく、直感的でわかりやすかったかと思います。
ユニットテストは自分が安心するのもありますし、機能毎の詳細な仕様書にもなります。
なのでしっかりテストを書いていきましょう。(面倒くさいけど)
CakePHPで新しい本が出てました。読まねば。
Webアプリ開発を加速する CakePHP2定番レシピ119
posted with amazlet at 14.01.01
長谷川 智希
秀和システム
売り上げランキング: 22,052
秀和システム
売り上げランキング: 22,052
更新情報はFacebookページで!
ブログの更新、読んで役立つ他ブログの記事などを更新しています。