PHP code coverage

PHPでカバレージを表示する。カバレージXdebugで取得できる。

Xdebugのインストールは以下をphp.iniに追加すればOK。

zend_extension_ts="c:/php/modules/xdebug-4.3-1.3.2.dll"

PHPUnit2なら最初からカバレージの機能があるみたいだが、環境がPHP 4.3.xとPHPUnitなので、簡単に自分で書いてみる。テストケースを実行しているところで、xdebugのカバレージ関数を呼んで、こんな風にする。

xdebug_start_code_coverage();

$suite = new PHPUnit_TestSuite("MyTest");
$result = PHPUnit::run($suite);
print $result->toHTML();

$coverage = xdebug_get_code_coverage();

ソースで実行した行を色を付けて出したいので、ちょうど以下で話題になっていたGeSHiを使ってみることにした。

$geshi->highlight_lines_extra()で実行した行をハイライトにする。

$suite = new PHPUnit_TestSuite("MyTest");
xdebug_start_code_coverage();
$result = PHPUnit::run($suite);
$coverage = xdebug_get_code_coverage();
print $result->toHTML();

//var_dump($coverage);

$file_to_print = 'c:\src\mysrc.php';
require_once('geshi/geshi.php');
$geshi = new GeSHi(file_get_contents($file_to_print), 
    'php', 'c:/php/includes/geshi/geshi');
$geshi->highlight_lines_extra(array_keys($coverage[$file_to_print]));
echo $geshi->parse_code();

日本語が化けるときには、とりあえずgeshi.phpの以下をソースに合わせて適当に変える。

var $encoding = 'ISO-8859-1';