質問: ### 前提・実現したいこと ./Console/cake test core Core/Configure 通常、CakePHPの公式ドキュメントで上記のように実施するものを、直接PHPUnitを使って、以下のコマンドのようにしてテストを実行したい。 /usr/bin/phpunit -c bootstrap.php tests/XxxModelTest ### 発生するエラー 命名規約に則ったXxxモデルのfindメソッドを呼び出すところで、メソッドがないとエラーになる。 ### 該当のソースコード ``` findAll(); } } ?> ``` ### 試したこと require_once "cakephpproject/app/webroot/index.php" → エラー内容変わらず。 ### 補足情報(言語/FW/ツール等のバージョンなど) PHP 5.6 CakePHP 2.7 PHPUnit 3.7
回答: CakePHP が用意したテストのフレームワークを使用しないことになるので、 フレームワークのメリットが台無しになり、逆に足かせになってしまうためオススメしませんが・・・。 まずは、 PHPUnit 実行時に、 に沿ってテストが行えるように phpunit 専用の bootstrap.php で環境を整えましょう。 webroot/index.php または test.php のディスパッチャ部分を除いたコードを読み込ませると良いそうです。 あとは気になった点をいくつか、 まずは、テストケースが CakeTestCase を継承していないのは意図的でしょうか? 面倒なフィクスチャの適用などの前処理を行なってくれるので便利なクラスなのですが・・・。 また、テストケース中で、クラスを new していますが、 CakePHP のモデルのインスタンスを取得するには ClassRegistry::init() を使用しなければなりません。 直接 new してインスタンスを生成することはできません。 また、テストケースで requre_once を利用している点も気になりました。 CakePHP 2系では、独自のクラスローダを用意していますので、そちらを使用しなければなりません。 ``` App::uses('Xxx', 'Model'); ``` などと記述します。