skillup

技術ブログ

PHP

CakePHP3 Unitテスト モデル編

投稿日:2017年1月23日 更新日:

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

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

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

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

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

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

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

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

  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

laravel+vessel

現場のリーダー的な方に進められてVesselというDockerのインストールなどをサポートするツールを触ってみました。 特にlaravelのインストールなどに向いていますが、laravelでなくとも使 …

no image

PHPの無名関数+array系の関数

PHPの無名関数について。 PHP5.3.0以降で実装され、概念としては知っていましたが、あまり使ったことがありませんでした。 今開発しているPHPの案件で無名関数のソースをみたので、復習もかねてメモ …

no image

phpenv5.3+php-fpm

レガシーなプロジェクトではいまだにPHP5.3なんかを使うケースがあったりします。 これがCentOS6だったらyumでphp5.3とかだったらいいんですが、サーバーはCentOS7だったりするとなか …

no image

cakePHPでのCSVダウンロード

cakePHPにてCSVのダウンロードなんぞを。 以前このエントリーでCSVダウンロードに関しては取り扱ったのですが、 ボタンを押す ファイルダイアログが開く パスを選ぶ 意図したデータを正常にダウン …

no image

PHPでのスクレイピング

本日はPHPスクレイピングについて。 スクレイピング自体はRuby、Javaとやってきました。 PHPに関しては昔、正規表現でごりごりやってましたね。これを使えば何でもできるんで一番早いです。 が・・ …