CakePHP1.3でテストコード(2) -フィクスチャをいじってみる(テストデータの動的登録)-

公開日: : CakePHP, IT, SimpleTest


cakePHP1.3でのSimpleTestを使ったテストケースの第2回目。
今回は、動的にテストデータを投入する方法を模索しています。

 今までの流れ

 やりたいこと

「テストケースによって利用するデータを変更したい」

フィクスチャを使うことにより、データを登録することができます。
しかし、通常の使い方では動的に値を登録することができません。

例えば、以下のようなデータをフィクスチャで登録したとします。

id名前発売日
1 1サンプル2012-03-01
2 1サンプル(2)2012-04-25

今の日時(03/23)で見れば、id2のデータは未発売になり、id1のデータは発売済みになります。
しかし、テストを実施した日によっては両方共、発売済みになります。

上記のように、テストケースを常に実行し続けて、ある日テストが失敗になってしまうような初期データでは困ります。
こういうケースのために、(特に)日時のデータを動的に変更したいのです。

 やったこと

フィクスチャで投入するデータを動的に変更できないかやってみました。
変更したのは、フィクスチャとテストケースの2つです。

 フィクスチャ

  • setInitDataメソッドで追加登録するデータを選べるようにしています。

<注意点>
setInitDataメソッドは__construct後に呼ばれます。
そのため、$normalDataがすでに登録されているので、主キーは別の値にする必要があります。

<?php
class SampleFixture extends CakeTestFixture {
    var $name = 'Sample';
    var $import = 'Sample';
    protected $records;
    function __construct() {
        $this->records = array($this->normalData);
        parent::__construct();
    }
    /**
     * 初期データの投入用
     */
    public function setInitData($type) {
        unset($this->records);
        switch ($type) {
        case 'old':
            $this->baseData['salesdate'] = date('Y-m-d', strtotime('-10 day'));
            $this->records = array($this->baseData);
            break;
        case 'new':
            $this->baseData['salesdate'] = date('Y-m-d', strtotime('+10 day'));
            $this->records = array($this->baseData);
            break;
        }
    }
     //ベースとなるデータ
     var $baseData = array(
        'id' => 2,
        'name' => 'サンプル', );
     //設定しない場合に利用されるデータ
     var $normalData = array(
        'id' => 1,
        'name' => 'サンプル',
        'date' => '2012-01-15',);
}

 テストケース

  • (1)でフィクスチャクラスを読み込みます。
  • (3)でフィクスチャで作成したsetInitDataメソッドを呼んでデータをセットします。
  • (4)で追加データを登録します(上位クラスにあるinsertメソッドを読んでいます)。
  • (2)でフィクスチャクラスを解放。

<?php
class SampleTestCase extends CakeTestCase {
    var $fixtures = array('app.sample');
    function startTest($method) {
        $this->Sample =& ClassRegistry::init('Sample');
        $this->SampleFixture =& ClassRegistry::init('SampleFixture'); //(1)
        echo "------{$method}モデルのテストスタート-------<br />";
    }
    function endTest($method) {
        echo "------{$method}モデルのテスト終了-------<br />";
        unset($this->Sample);
        unset($this->SampleFixture); //(2)
        ClassRegistry::flush();
    }
    /**
     * 指定本の取得
     */
    public function testGet() {
        $this->SampleFixture->setInitData('old');  //(3)
        $this->SampleFixture->insert($this->db); //(4)
        $result = $this->Sample->get(1);
        $expected = array('Sample' =>
                          array('id' => 1,
                                'name' => 'サンプル',
                                'date' =>  date('Y-m-d', strtotime('-10 day')),), );
        //一致するかどうか
        $this->assertEqual($result, $expected);
    }
}

 まとめ

テストケースとフィクスチャを改良することで、最初に登録した値とは別の値を追加して登録できるようにしています。
これにより、日時などのような動的なデータも扱えるようにしています。

他にもっといいやり方があるのかもしれませんが、現時点ではこんな感じでやっています。

広告

関連記事

no image

MacBook ProにGitのインストール

MacBook ProにGitをインストールしようと思いたち、思ったより手間取ってしまったので備忘録

記事を読む

no image

jQueryMobileでタッチ(スワイプ)してページ遷移 -Paginationプラグインの利用-

スマートフォン対応をしていてタッチしてページ遷移させたいケースがあるかと思います。 そんな時に便利

記事を読む

no image

PhoneGapを触ってみた(2) -実機でテスト編-

* 今までの流れ - * 自分の端末で動かしてみよう 今回は、PhoneGapで作成したアプリを実

記事を読む

no image

CakePHP1.3にSmartyを導入

いい加減、CakePHP(1.3)にもSmartyを導入することにしました。 * ダウンロード

記事を読む

iPhoneアプリ開発 芳名帳アプリ作成(4) -設定準備-

* 今までの流れ - -[http://pplace.jp/2013/06/1531/:title=

記事を読む

スクリーンショット 2013-04-27 11.46.12

githubを使っての開発(2) -masterブランチにマージ-

前エントリーでgithub-flowをもとにした流れを書いたのですが、その中のマージについてもう少し

記事を読む

iPhoneアプリ開発 芳名帳アプリ作成(5) -ペンサイズと入力エリア数の設定-

* 今までの流れ - -[http://pplace.jp/2013/06/1531/:titl

記事を読む

no image

iPhoneアプリ開発 -WebViewで表示しているページで特定のリンククリック時の動作を変える-

* やりたいこと UIWebViewでWebページを表示し、特定のリンクをクリックした際には別処理を

記事を読む

no image

カレログ騒動で考えたライフログのこと

今回、カレログというAndroidアプリが話題になり騒動になってます。 というわけで、ふとカレログ

記事を読む

no image

PhoneGapを触ってみた(3) -画像を扱う(Camera APIを使ってみる)-

今回は、PhoneGapのCamera APIを使って携帯のアルバムにある画像を扱ってみます。

記事を読む

広告

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

広告

no image
[感想] Effective Objective-C 2.0 ☆☆☆☆★(4.5)

* 構成 - 第1章 Objective-Cに慣れる -

no image
[感想] iOSアプリテスト自動化入門 ☆☆☆(3.0)

* 構成 - Chapter 1 テスト自動化への取り組み

DeployGateを試してみた(iOS編) -DeployGateがiOSに対応-

今までのDeployGate - -[http://pplace.

iPhone/iPadアプリを開発するためにやったこと

今までに、iPhoneを3本ほどリリース((リリースしたアプリは全て1

no image
ターミナルでgitのコマンドを補完したりブランチ名を表示する – macでgitを便利に使うために –

* やりたいこと macのターミナルでgitをいじっていると -今の

→もっと見る

PAGE TOP ↑