CakePHP はテスト用モデルをテストするのかな?

ZendFramework を使って開発していた案件を、CakePHP で開発する様にしてみた。

個人的に請け負った案件で、ZendFramework を使っていたわけですが、(12月にサボりすぎて)時間がなくなってきたので、CakePHP を使った開発に切り替えてみました。出来合いのフレームワークで、Rails 的なやつなら、型にはめてしまえばさっくり行けるだろうという、甘い考えで見切り発車です。

で、早速困ってしまったわけです。クックブックを読みながら開発をスタートしたわけですが、これに従うと、モデルのテストをする際に、テスト用モデルを作る事になります。

テスト用モデルありきのテストをクックブックに従って書いた場合、フィクスチャでデータを入れる先もテスト用テーブル(_tests)になります(使うモデルをテスト用モデルにした場合)。こうして何が困るかというと、関連(hasOne や belongsTo など)を利用した機能のテストができなくなります。

実モデルで関連を定義した場合、当然実モデルの名前で関連付けを行います(よね?)。ところが、テストでは、テスト用モデルを使います。フィクスチャを再利用しようとして、全部テスト用モデル(を使うフィクスチャ)を使ってデータを入れてしまうと、実モデルで使うテーブルにはデータが入りません。そうなると、関連でデータを引っぱろうとしても、該当データが無いので、テストになりません。

というわけで(?)、そもそも「テスト用モデルをテストする」意味が分からなかったので、実モデルをテストする様にしました。(DB 切り替えのために継承してプロパティ書き換えるのは、どうなんだろうか。モデルは名前に意味を持つし、なんかすっきりしません。)

実モデルのベースになる AppModel 内で、テスト実行時にはデータベースをテスト用に切り替える様にすれば、実モデルを使ってテストをしても、本番環境を汚さずに済みます。DB が異なれば、テーブル名をテスト用に変更する必要も無いでしょう。
参考:CakePHP のテストは自動的にテスト用のデータベースを使うもんだと思ってた - pm11op のブログ

ひょっとしたら、設定項目を見逃していて、関連もテスト用に上手く切り替わるのかもしれませんが、実モデルをテストしたいので、テスト用モデルを使わずに済む方法でやっていこうと思います。

さて、なんだか暗雲立ちこめてきた今日この頃です。

プロフィール

このブログ記事について

このページは、koshigoeが2009年1月10日 23:44に書いたブログ記事です。

ひとつ前のブログ記事は「2009 年は平成 21 年」です。

次のブログ記事は「息抜きに Configatron について調べてみた」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。