CakeTestCaseを独自の拡張クラスに置き換える

環境: CakePHP 1.3

CakePHPでTestCaseの機能を拡張したい場合、CakeTestCase クラスを継承した独自のベースクラスを作る。

abstract class MyTestCase extends CakeTestCase {
  function assertHoge() {
    //...
  }
}

しかし標準ではこのクラスを自動的に読み込む手段がない。各テストファイルの先頭で毎回 App::import するのはあまりにも面倒なので、自動で読み込むための方法を調べてみた。

前提:

  • 必要なファイルは全て一つのプラグイン(以下 my_test)の中にまとめる
  • Webからの実行(test.php)、コンソールからの実行(cakeshell)、両方に対応する

my_test/config/bootstrap.php

この bootstrap.php の中で MyTestCase はじめとする必要なクラスファイルを読み込む。下の例では ComponentTestCase も読み込んでいる。

my_test/libs/test_suite_dispatcher.php

test.phpからの実行時に必要なファイル

my_test/vendors/shells/my_test.php

コンソールからの実行に必要なファイル

以上の3ファイルが app/plugins/my_test 以下にあれば良い。

コンソールから実行する場合

cake testsuite の代わりに cake my_test を実行するだけ。

Webからtest.phpで実行する場合

test.php の書き換えが必要。といってもファイル末尾の CakeTestSuiteDispatcher を MyTestSuiteDispatcher に入れ替えるだけ。

require_once CAKE_TESTS_LIB . 'cake_test_suite_dispatcher.php';
//
App::import('lib', 'MyTest.MyTestSuiteDispatcher');
$Dispatcher = new MyTestSuiteDispatcher();
//
$Dispatcher->dispatch();

参考: CakePHP1.3 CakeTestCase の拡張を読み込む bootstrap 的なものをつくる

One Response

  1. [...] それならいっそ全テーブルを自動で読み込んでくれよ、ということで自動で読み込む方法を考えました。以下のクラスに示す2メソッドを CakeTestCase のサブクラスで定義してください(CakeTestCaseを独自の拡張クラスに置き換えるも参照)。 [...]

Leave a Reply