Hatena::Groupbugrammer

蟲!虫!蟲!

Esehara Profile Site (by Heroku) / Github / bookable.jp (My Service)
過去の記事一覧はこちら

なにかあったら「えせはら あっと Gmail」まで送って頂ければ幸いです。
株式会社マリーチでは、Pythonやdjango、また自然言語処理を使ったお仕事を探しています

 | 

2012-07-01

[][]Code Igniterでのテストの方法について 22:49

 ここ最近は、PHPフレームワークであるCode Igniterを使ってコーディングしていく仕事が出てきたので、その辺りを上手く扱うための練習をしていました。おそらく個人的に使っていたデータベースを再利用するのが早いんだろうな、と思ったので、Pythonによって簡単にスクレイピングしていたPostgreSQLのデータを表示する為のシステムでも簡単に実装してみようかなと思って、その辺りの報告をば。

最初にテストの方法が気になる

 フレームワークの扱うといったときに、最初に「このフレームワークのテストはどのように行うべきなのか」という点がまず気になったりする。テストを書かなくてもゴリゴリやっていけばいいのだろうけれども、自分としてテストを書く理由は下のとおり。

  1. 出力前にその関数に期待している挙動を確認しておきたい
  2. その関数が少なくともどのような機能を保証されているのかを確認したい

 自分は小心者なので、やはりビクビクしながら「これで動くのかな……」とやるよりも、テストで通ったら「よし、これでいい!」と確認しながら進めていくのが一番いいなとは思っています。

 過去に書いた感想に関してはPHPUnitでテストを書くのが楽しい - 蟲!虫!蟲! - #!/usr/bin/bugrammer を参照してください。

CI_Testを導入する

 導入の仕方は、 CodeIgniter 2.0.3 に PHPUnit/CIUnit をインストールする - A Day in Serenity @ kenjisを見るのが一番簡単だと思います。基本的にはレポジトリ内のフォルダをコピーしてくればいいと思われます。あとはテスト用のデータベース設定などが必要ですが、上のサイトを見ながら導入するとわかりやすい。

 あとは、このCI_TestはPHPUnitを使用することが前提になっているので、PearPHPUnitインストールすることも忘れずに、といったところだろうか。

実際にどういうコードを書くべきか

 基本的にはレポジトリのサンプルコードを見るのが早いとは思うのですが、実際に動いたコードを載せて置くと、下のような形になります。

<?php

/**
 * @group Model
 */

class SomeModelTest extends CIUnit_TestCase
{
    public function __construct($name = NULL, array $data = array(), $dataName = '')
    {
	parent::__construct($name, $data, $dataName);
    }
	
    public function setUp()
    {
        $this->CI->load->model('Unagi_Model');
        $this->db = $this->CI->Unagi_Model;
    }
    
    public function testBasicTest()
    {
        $actual = $this->db->unagi_list();
        $this->assertEquals(50,count($actual)); 
    }

    public function testDisplayTotal()
    {
        $actual = $this->db->display_total();
        $this->assertTrue((int) $actual > 0);
    }
}

 なんてことはなく、いわゆるCode Igniterの方法でmodelを呼び出してあげて、あとはPHPUnitの慣習にしたがってテストコードを書いていきます。

 なにはともあれ、Code Igniterのテストの仕方とコントローラー、モデルの書き方はわかったので、安心してコードを書けそうです。

そのほか

Code igniterでテスト駆動開発 資料作成中

 |