CakePHPでdoctestできるようにした!(まだModelだけ)

今日のPHP勉強会でdoctestすごい便利そうでいいなーと思ったので早速CakeのModelをテストしようと思ったのですがそのままでは動きませんでした。なんかクラス名にCakeと相容れない規則があるみたいだったので適当につぶしました。

doctestを利用するには、PHPUnit3とMaple4_DocTestが必要です。インストールは

第7回 DocTestを使ってUnitTestをやってみよう – テスト講座

を参考にしてください。

Maple4_DocTestがそのままだと動かないので修正します。

まず一箇所目。Maple4/Utils/Class.php。


*** ./Maple4_DocTest-0.2.0/Maple4/Utils/Class.php       2008-08-20 22:40:55.000000000 +0900
--- /usr/share/php/Maple4/Utils/Class.php       2008-08-31 21:46:53.000000000 +0900
***************
*** 81,86 ****
--- 81,91 ----
       */
      public function toClassname($filename, $options = array())
      {
+         $filename = basename($filename);
+         $parts = explode('_', $filename);
+         $parts = array_map('ucfirst', $parts);
+         $filename = implode('', $parts);
+
          $doUcfirst = true;
          if (isset($options['ucfirst']) &&
              !is_null($options['ucfirst'])) {

もういっこ。Maple4/DocTest/Runner.php。


*** ./Maple4_DocTest-0.2.0/Maple4/DocTest/Runner.php    2008-08-20 22:40:55.000000000 +0900
--- /usr/share/php/Maple4/DocTest/Runner.php    2008-08-31 22:16:23.000000000 +0900
***************
*** 118,124 ****

              require_once($realpath);

!             $classname = $this->classUtils->toClassname($path);

              if (!is_null($classname)) {
                  $suite->addTestSuite($classname);
--- 118,125 ----

              require_once($realpath);

!             //$classname = $this->classUtils->toClassname($path);
!             $classname = current(explode('.', basename($path)));

              if (!is_null($classname)) {
                  $suite->addTestSuite($classname);

たぶんこれで下準備は大丈夫。次はdoctestを実行するCake用のシェルスクリプトを用意します。以下の内容をdoctest.phpとしてapp/vendors/shells/の下に保存します。


/**
 * DoctestShell
 *
 */
class DoctestShell extends Shell {

    /**
     * model
     *
     * <example>
     * cd app
     * ../cake/console/cake doctest model
     * <example>
     */
    function model()
    {
        require_once CONFIGS . 'database.php';
        App::Import('Core', array('Model', 'AppModel'));
        $this->doctest('models');
    }

    /**
     * doctest
     *
     */
    function doctest($place)
    {
        require_once 'Maple4/DocTest.php';

        $pathname = dirname(dirname(dirname(__FILE__))) . '/' . $place;

        $options = array(
            'compileDir' => dirname(dirname(dirname(__FILE__))) . '/tmp/tests/' . $place,
            'color' => true,
            'report' => null,
            'forceCompile' => true,
            'notify' => null,
        );  

        Maple4_DocTest::create()->run($pathname, $options);
    }
}

で、あとは、CakePHP1.2 バッチ処理 | Sun Limited Mt.を参考に、


cd app
../cake/console/cake doctest model

と実行すると、Modelに対してdoctestが動きます。

Related posts:

  1. Upload PEAR package from CLI
  2. visitorsのログを整理するスクリプト
  3. [自己解決しました]はびたむでBelongsToManyでの絞り込み[嘘ですわかりません]
  4. snippetsEmu.vimのPHP定義ファイルをPEAR Styleにした
  5. 2007年にアドエスで撮った写真の枚数をグラフにしてみた

コメントをどうぞ

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

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

ねこ認証:9つのパネルの中からねこを3匹選んでください

Additional comments powered byBackType