skillup

技術ブログ

PHP

CakePHP3 Unitテスト モデル編

投稿日:

長らくやろうやろうと思っていながら手がつかなかったCakePHP3のユニットテストについて。

以前にも何らかのエントリーで書いたのですが(下記参照)、モデル系はなかなかやらなかったので、これを機に説明させていただきます。

CakePHP3系でのテスト処理
CakePHP3でのコレクションに関して(厳密にはテストではないですが、デバッグに便利)

注意点ですがなんといっても「テスト用のテーブルはドロップされる」でしょう。初期化ではなく、テーブル自体がなくなってしまいます。

これが何といっても一番注意しなくてはいけないでしょう。設定ファイル(下記参照)で設定されたテスト用のデータベースですが、なんとデータベースはドロップされます。

http://onlineconsultant.jp/pukiwiki/?CakePHP3%20PHPUnit%20%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%8C%E6%B6%88%E3%81%88%E3%82%8B

これはデータベースのテストという観点から考えると当たり前かもしれません。

データベース系のテストの場合、なんといっても前提条件となる状態を保存しておくことが大切になります。

そのため下記のような手順が本来は望ましいです。

  1. 内部のデータを一度保存
  2. データベースを初期化
  3. 前提となるデータを入れる
  4. テストを行う
  5. 1で保存したデータをリストアする

参考(DBUnit)

http://skill-up-engineering.com/?p=924

Cakeの場合2~5が実行されることになります。

知らないで使っているデータベースをつなぐとえらいことになるので気を付けましょう。

Fixture

また上記のステップ3で使用する前提となるデータですがFixtureというクラスで定義されています。

ディレクトリは/tests/Fixtureです。※最初はbakeで作るのが良いと思います。

ここに入っているデータがテスト中は一時的に取り込まれますが、テストを行うとそもそもテーブル自体がドロップされますのでデバッグして途中で止めない限りはわかりません。

Fixtureを作るのはbakeが一番楽でしょう。よく考えるとテーブルの状態も変わっていくことがほとんどなので実際のテーブルを持たずに、都度更新しておいたほうが理にかなっています。

また上記の2~5のステップは1テストごとに実行されるのでそれぞれのメソッドでの状態変化は考えなくてもよいです。

ソース

超簡単なテストですが、Fixtureと実際のモデルのテストケースのソースを記述させていただきます。

Fixture

テストケース

※実際にはテストはしておらず単なるデバッグですが・・・

 

-PHP
-,

執筆者:


comment

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

関連記事

no image

CakePHPでの数字カンマ区切り&PHP&MySQL曜日の出力

今回は主に時間やお金の表示など、出力に関するネタです。 Contents1 Cakeでのカンマ区切り1.1 単純なカンマ区切り 例1,0001.2 \をつけるケース 例 \1,0001.3 円をつける …

no image

cakePHPの認証-Authコンポーネント

ひさびさにPHPをやる機会があり、短期での開発だったため、cakePHPを使いました。 以前やったことがあったんですが、もう2年以上たっていますね。 といいつつも昔のソースを見ながらやることで思い出し …

no image

CakePHP3 Csvプラグイン

cakePHPでのCSVダウンロードプラグインを実装 Contents1 インストール2 プログラム3 注意点4 参考 インストール composer.jsonに下記のように書いてcomposer u …

no image

ob_startを使ったバッファリング出力

先日var_dumpの結果をログに出力したいときに検索すると下記のようなコードを書けばよいということがわかりました。

ob_start …

no image

laravelでのredis活用

以前下記エントリーでredisの活用について書きました。 インメモリデータベース redis 一般的な使用法ですと登録できるデータはstring,list,hashのような比較的単純な形しか登録できな …