PHPUnitとphpspecのコードカバレッジの組み合わせ

今日、Githubのこのライブラリまたはそのライブラリ(テストはありません)は、もはや真剣に受け止められていません。 テストは、リファクタリングを大胆に行い、モジュール、クラス、または関数が意図したとおりに機能することを確認するのに役立ちます。 PHPのさまざまなバージョンでコードをテストし、事前にエラーを検出できます。 これは、コードの品質と安定性を保証します。



コードの100%のカバー率を追求することには意味がありませんが、テストでコードの何パーセントがカバーされるかを平均的に理解することは、継続的インテグレーションの良い指標です。

カバレッジの割合が50を下回るなど、アラートを設定できます。ボットからのリクエストのプールに自動コメントを追加したり、コードカバレッジの傾向を経時的にグラフに表示したりできます。

画像

しかし、テストに複数のライブラリを使用するとどうなりますか? 一般的なコードカバレッジを取得する方法

phpcovライブラリが助けになります

したがって、各ビルドで何をしますか(例としてTravis-CIを使用):


例として、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でテストでカバーされている行とされていない行を直接確認できます。

画像
画像

Source: https://habr.com/ru/post/J316210/


All Articles