単体テスト以外のコードカバレッジを取りたくなったのだけど、使いやすそうなツールが見つからなかったので、xdebugを使ってコードカバレッジを測定してみた。
#インストール
PHP5.6向けのxdebugは標準レポジトリに入っていないので、peclでインストールする。
sudo yum install php56 php56-devel php-pear
sudo pecl install xdebug
sudo vi /etc/php.ini
# php.iniの末尾にでもextensionのロード指定を追加する→ zend_extension=/usr/lib64/php/5.6/modules/xdebug.so
sudo /etc/init.d/httpd restart #リスタート
phpinfo()で、xdebugが出力されていればインストールに成功しています。
#使ってみた
カバレッジが取れるかやってみた。
##実行したコード
以下のコードを実行しました。not zeroの行は実行されないはずです。
<?php
xdebug_start_code_coverage();
$x = 0;
if($x == 0){
echo "zero";
}else{
echo "not zero";
}
var_dump(xdebug_get_code_coverage());
?>
##実行結果
8、9、10行目のカバレッジが記録されませんでした。妥当といえば妥当なのですが、コードがないとはいえ10行目は通っているので、不自然な感じはします。ソースコードとカバレッジを重ねて表示すると分かりやすいと思いました。複数のテストケースを実行した結果をデータベース等に保存し、ビューアーを作ることで、比較的簡単にコードカバレッジ測定(表示)ツールを作れそうです。
zero
/var/www/html/cover.php:11:
array (size=1)
'/var/www/html/cover.php' =>
array (size=5)
4 => int 1
5 => int 1
6 => int 1
7 => int 1
11 => int 1
#まとめ
ちょっと頑張ればコードカバレッジ測定ツール作れそう。