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"; } [...]