Simple Testのpost()のパラメータと些細なカスタマイズ

今とあるシステムの開発をお手伝いしているのですが、そのシステムのテストをするためにSimple Testを使うことにしました。
HTTPUnitを使わなくてもUIのテストができるので便利そうです。

はじめてSimple Testを使うので、 オープンソースプロダクトでSimple Testを実際に使っているものは無いか探しました。それで見つかったのがs2php5です。
s2php5の中に書かれているテストコードを参考にして、ちょっとテストコードを書いてみることにしました。

それで早速はまりました。WebTestCaseにあるpost()の使い方がよくわかりませんでした。
ドキュメントには以下のように書かれているのですが、$parametersの構造については何も言及されていませんでした。

post($url, $parameters) Send a POST request with these parameters

ちょっと困ったので、Simple Testのソースコードを読んでいろいろ試してみたところ、以下のように書けばよいことがわかりました。

class WebTests extends WebTestCase {
[...]
	function testFoo() {
		$url = 'http://localhost/xxx/foo.php';
		
		// パラメータを組み立てる
		$params = array();
		$params['in_title']  = 'title';
		$params['in_text']   = 'text';
		$params['in_author'] = 'author';
		
		$this->post($url, $params);
		
		$this->assertWantedPattern('/buz/');
	}
[...]
}

それと、assertWantedPattern()で期待していた文字列がページ内に含まれていない場合、そのページのHTMLのコードの一部が表示されるのですが、HTMLコードの本当の最初の部分しか表示されません。そこで以下のような、ほんの少しのカスタマイズをしました。これだけでも、かなり助かりました。

vi simpletest/dumper.php
[...]
    class SimpleDumper {
        
        /**
         *    Renders a variable in a shorter form than print_r().
         *    @param mixed $value      Variable to render as a string.
         *    @return string           Human readable string form.
         *    @access public
         */
        function describeValue($value) {
            $type = $this->getType($value);
            switch($type) {
                case "Null":
                    return "NULL";
                case "Boolean":
                    return "Boolean: " . ($value ? "true" : "false");
                case "Array":
                    return "Array: " . count($value) . " items";
                case "Object":
                    return "Object: of " . get_class($value);
                case "String":
                    // clipString()の第2引数を100→1000に
                    return "String: " . $this->clipString($value, 1000);
                default:
                    return "$type: $value";
            }
            return "Unknown";
        }
[...]