コードの100%のカバー率を追求することには意味がありませんが、テストでコードの何パーセントがカバーされるかを平均的に理解することは、継続的インテグレーションの良い指標です。
カバレッジの割合が50を下回るなど、アラートを設定できます。ボットからのリクエストのプールに自動コメントを追加したり、コードカバレッジの傾向を経時的にグラフに表示したりできます。
しかし、テストに複数のライブラリを使用するとどうなりますか? 一般的なコードカバレッジを取得する方法
phpcovライブラリが助けになります
したがって、各ビルドで何をしますか(例としてTravis-CIを使用):
- PHPUnitテストの実行、コードカバレッジの生成
- phpspecテストを実行し、コードカバレッジを生成する
- 結果を単一のカバレッジにマージします
- 後の分析と表示のために結果を保存します
例として、PHPUnitとphpspecが使用されるSymfony3のプロジェクトを取り上げます。
PHPUnitテストの構成は次のようになります。
phpunit.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- https://phpunit.de/manual/current/en/appendixes.configuration.html --> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.8/phpunit.xsd" backupGlobals="false" colors="true" bootstrap="app/autoload.php" > <php> <ini name="error_reporting" value="-1" /> <server name="KERNEL_DIR" value="app/" /> </php> <testsuites> <testsuite name="Project Test Suite"> <directory>tests</directory> </testsuite> </testsuites> <filter> <whitelist> <directory>src</directory> <exclude> <directory>src/*Bundle/Resources</directory> <directory>src/*/*Bundle/Resources</directory> <directory>src/*/Bundle/*Bundle/Resources</directory> </exclude> </whitelist> </filter> <logging> <log type="coverage-php" target="/tmp/coverage_phpunit.cov"/> </logging> </phpunit>
これは、いくつかの行を除き、標準の構成です。
<logging> <log type="coverage-php" target="/tmp/coverage_phpunit.cov"/> </logging>
ここでは、カバレッジレポートのPHP形式が使用され、ファイルが目的のフォルダーに配置されると言います。
次に、phpspecで同様のアクションを実行します。
# phpspec.yml ... extensions: PhpSpecCodeCoverage\CodeCoverageExtension: format: - php output: php: /tmp/coverage_phpspec.cov
各ビルドでこの全体を実行し、結果を保持することは残ります。
# .travis.yml ... script: - bin/phpspec run --format=pretty - bin/phpunit - wget https://phar.phpunit.de/phpcov.phar && php phpcov.phar merge /tmp --clover coverage.xml
phpcovは、フォルダーからすべてのデータを収集し、それらを組み合わせて、結果をClover形式で保存します。Clover形式は、バッジなどのコードカバレッジの表示に使用できます
以上です。 テストを書き、喜んでリファクタリングします。
UPD:バッジ、リクエストのプール内のコメントなどは、 codecov.ioサービス(または、代わりに-coveralls.io)を使用して行われます
リポジトリをセットアップした後、Travis-CIとの統合は1行で行われます。
# .travis.yml ... after_success: - bash <(curl -s https://codecov.io/bash)
Codecovは、生成されたレポートをClover形式で自動的に取得して分析します。
また、ブラウザーにアドオンをインストールすると、Githubでテストでカバーされている行とされていない行を直接確認できます。