PHPUnitでテストクラス雛型自動生成。from既存のソースから。
ユニットテストについても少しだけ書く。
テストコード、まず書くのがめんどくさいという人は多いと思う。
ので、それを軽減する方法を。
テストコードのスケルトンを自動生成する。
それには追加でPEARパッケージを導入する。
pear install phpunit/PHPUnit_SkeletonGenerator
これだけ。
既に存在するソースからテストコードのひな型を作るときはコマンドラインから、
phpunit-skelgen --test --bootstrap -- "" " "
とする。
"
それすらもめんどくさいという人は、以下みたいなラッパーで簡略化してしまおう。
genTest.php
<?php $bootstrap = "</path/to/bootstrap.php>"; $libs = "</path/to/existing_class_dir>"; $tests = "</path/to/test_class_dir>"; $params = $_SERVER['argv']; $class_name = $params[1]; // convert [php5.3 namespace separator] to [path separator]. if (false !== strpos($class_name, '\\')) { $cls_str = str_replace('\\', '/', $class_name); // other, ["_" separator] to [path separator]. } else { $cls_str = str_replace('_', '/', $class_name); } if (!file_exists("${tests}/${cls_str}Test.php")) { $dir = pathinfo("${tests}/${cls_str}Test.php", PATHINFO_DIRNAME); if (!file_exists($dir)) { mkdir($dir, 0777, true); } touch("${tests}/${cls_str}Test.php"); } exec("phpunit-skelgen --test --bootstrap ${bootstrap} -- ${class_name} ${libs}/${cls_str}.php ${class_name}Test ${tests}/${cls_str}Test.php", $output, $ret); foreach ($output as $row) { echo $row . PHP_EOL; }
これを用意したら、
php genTest.php
で既存のクラスファイルに対応したテストクラスファイルが自動生成されるようになる。
楽ちん。
このように、どんどん自動化してゆくと色んなことが楽しくなると思う。
※if you can, 最初にテストコードを書きましょう。