ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

ReflectionClass と zend.ze1_compatibility_mode に嵌められた。

Pseudo_CodeBlockのテストケースを書こうと思い、いつまでもSimpleTestに頼ってもいられない。時代はPHP5で、PHPUnitがデフォルトになりつつある。

っつーか、Stagehand_TestRunnerを使いたいんだけどアレ、PHPUnitしか対応してないから。

http://pear.piece-framework.com/index.php?package=Stagehand_TestRunner

というわけで、PHPUnitを使おうとしてみた。

http://www.phpunit.de/

pearコマンド経由でのインストール方法が載っていたので、それに従いインストール。

で、早速上記本家ドキュメントにも記載されているArrayTestを作成してみる。

http://www.phpunit.de/pocket_guide/3.2/en/writing-tests-for-phpunit.html

をコピペ。で、動かす。

DOS> phpunit ArrayTest

>

・・・なぜ何も出力されないの 。゚(゚´Д`゚)゚。

で、必死にスクリプトを追っていったら PEAR/PHPUnit/Runner/StandardTestSuiteLoader.php

public function load(
    $suiteClassName, $suiteClassFile = '', $syntaxCheck = TRUE)
    {
        // ...
        if (class_exists($suiteClassName, FALSE)) {
            return new ReflectionClass($suiteClassName); // ←ココ!!
        } else {

で、いきなりスクリプトが終了している。error_logにも何も出力せずに。

ど、どういうこと・・・??
試しに

<?php
class Hoge { public function hoge() { echo "hello\n"; } }
try {
    $r = new ReflectionClass("Hoge");
    var_dump($r);
} catch(Exception $e) {
    echo "-----------";
    var_dump($e);
}
echo "==========";
?>

とかやっても、やっぱり何も出力されない。

リフレクションのPHPマニュアルにも書いてないし、何なんだよぉ・・・と泣きが入りかけた。php.iniでxdebugとか入れたのが不味かったのかと思い、戻してみても症状変わらず。

ふと。

「あ、zend.ze1_compatibility_mode = On か・・・?」

ローカル環境は数日前までPHP4。で、多くをそのままで動かしたかったので、念のためこれを明示的にOnにしておいたのだ。

Offに戻したら問題なく動いたよコンチキショー!!!!!!!!ヽ(`Д´)ノ

やられた!だって上述のPHPマニュアルにも、そんなの一言も載ってないんだもん!!

うぇぇえええん・・・ひどいよぉ。何も悪い事してないのに、こんな仕打ち・・・。

まあいい。とにかくコレでPHPUnitは動き出す。さて、練習、練習・・・っと。

Stagehand_TestRunnerが激しく楽。

で、どうにかPseudo_Blockのテストケースを書けた。

で、とにかくStagehand_TestRunner、楽。***_TestCase.php の置いてあるディレクトリに移動して、

> testrunner3

とするだけで、再帰的に走査して、**_TestCase.phpを勝手に実行してくれる。

楽だわー・・・。