BETA

PHPUnitとXdebugでコードカバレッジの出力を試す

投稿日:2019-08-15
最終更新:2019-08-15

Laravel Conference 2019で軽く触ったものの、その後まったく触っていませんでした。が、最近あるサンプルコードでテストコードを書いてみようと思い立ち、PHPUnitを使ったテストコードを書いてみました。

一通り書き終わって、「そういえばカバレッジって出力できるのだろうか?」と思い、調べてみたのでその内容を備忘録として記録しておきます。

結論から言うと、PHPUnitのほかにXdebugというライブラリが必要で、そのセットアップを行うことでカバレッジ出力できるようになりました。

1. Xdebugがあるかどうかの確認

"scripts": {  
        //略  
    "test:coverage": "phpunit --coverage-html coverage"  
}  

PHPUnitがインストールされているプロジェクトで、上述のようにcomposer.jsonの中にscriptsを書き足します。

<phpunit bootstrap="vendor/autoload.php">  
    <!-- 略 -->  
    <filter>  
        <whitelist processUncoveredFilesFromWhitelist="true">  
            <directory suffix=".php">./src/</directory>  
        </whitelist>  
    </filter>  
</phpunit>  

次に、phpunit.xmlにテスト対象のフィルタを追加します。上述の例では/src/ディレクトリ以下のphpファイル全てということになります。

この2つを設定した上で、以下のコマンドを実行。

> composer test:coverage  

もし

Error: No code coverage driver is available

というエラーが表示されたら、Xdebugがインストールされていないことになるので、インストールに進みます。

2. Xdebugのセットアップ

Xdebugのセットアップは環境によってまちまちのようです。私の場合はWindowsでXAMPP使用という環境で試してみました。

  1. コマンドでphp -iを実行し、phpinfoの内容を出力。その内容をコピー
  2. https://xdebug.org/wizard.phpにアクセスし、テキストエリアに1.の内容を丸ごとコピーし、ボタンをクリック
  3. 画面にセットアップ手順が表示されるので、その指示に沿ってセットアップを行う
    1. php_xdebug-X.X.X-Y.Y-vcZZ.dllのようなバージョン指定のdllファイルをリンクからダウンロード
    2. XAMPPインストールディレクトリしたのphp\extに1.のファイルをカット&ペースト
    3. XAMPPのphp.iniを編集、zend_extension = D:\xampp\php\ext\php_xdebug-2.7.2-7.1-vc14.dllの1行を付け足して保存
    4. ZAMPPのApacheを再起動

私の場合、これでOKでした。

3. カバレッジ出力

「2. Xdebugのセットアップ」が完了した状態で、「1. Xdebugがあるかどうかの確認」の最後で実行したコマンド

> composer test:coverage  

を再度実行します。

> composer test:coverage  
> phpunit --coverage-html coverage  
PHPUnit 7.5.14 by Sebastian Bergmann and contributors.  

..............                                                    14 / 14 (100%)  

Time: 596 ms, Memory: 6.00 MB  

OK (14 tests, 36 assertions)  

Generating code coverage report in HTML format ... done  

テストの後に

Generating code coverage report in HTML format ... done

というメッセージが出力され、生成されていることが確認できます。

今回はhtmlオプション指定なので、プロジェクトのルートディレクトリ下にcoverageディレクトリが作成され、その中にHTMLファイルなどが生成されました。試しにそのHTMLファイルを開いてみると

確かに、カバレッジの内容が表示されますね(テストの結果はともかくとして……)。

参考

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

アルム=バンドのQrunch

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう