2012年3月11日日曜日

【PHPUnit】スケルトンのカスタマイズ

最近珍しく技術ブログを書いてます。

今回はPHPUnitのカスタマイズです。

phpunit --skeleton-test
でテストファイルの雛形を作ってくれますが、 getterとかsetterとかのテストって

  1. 変数に値入れる
  2. setterで変数をset
  3. assertEqualsで変数の値とgetterの値を比較

ですよね。まぁただデータを保持するだけのクラスのテストがいるかは分かりませんが。

それはさて置き、PHPUnitを使うのに必要なファイルはほとんど(全部?)PHPで書かれていました。
(phpunitのコマンドも!!)

なのでいくらでもカスタマイズできます。

今回はスケルトンで作成されるファイルをカスタマイズします。

修正するファイルは
PHPUnit/Util/Skeleton/Test.php
PHPUnit/Template/IncompleteTestMethod.tpl.dist
この2つです。

IncompleteTestMethodはスケルトンクラスのテストメソッドのテンプレートです。

public function test{methodName}(){
}
のようにtestメソッドが定義されています。
Test.phpで中括弧の部分を置換しています。
オレオレテンプレートですね。

なのでこの2つのファイルを書き換えればスケルトンを作った時に自分の好きな形式で作成することができます。

Test.phpの一部を
$var = array(
    "methodName" => ucfirst($mothod->getName())
);
if(substr($method->getName(), 0, 3) == "get" || substr($method->getName(), 0, 3) == "set"){
    $var['comment'] = '// set value manually';
    $var['initProcess'] = '$_value = ""';
    $var['setProcess'] = '$this->object->'."set".ucfirst($substr($method->getName(), 3)).'(_value);';
    $var['assertProcess'] = '$this->assertEauals($_value, $this->object->'."get".ucfirst(substr($method->getName(), 3)).'());';
}else{
    $var['comment'] = '// Remove the following lines when you implement this test.';
    $var['initProcess'] = '$this->markTestIncomplete("This test has not been implemented yes.");7;
    $var['setProcess'] = "";
    $var['assertProcess'] = "";
}
$methodTemplate->setVar($var);


IncompleteTestMethodの一部を

public function test{methodName}()
{
    {comment}
    {initProcess}
    {setProcess}
    {assertProcess}
}

こんなふうに変えるとgetter/setterの場合に変数の初期値以外雛形を作ってくれます。

もっと上手い例を挙げられればよかったですね。

ではでは

0 件のコメント:

コメントを投稿