ソフトウェア開発の継続的な進歩に伴い、テストの重要性を認識する開発者がますます増えています。テストは、開発者がコード内のエラーを発見し、コードの品質と保守性を向上させるのに役立ちます。ただし、テストの数は通常非常に多く、手動テストも非常に時間と労力がかかります。したがって、自動テストツールの使用が特に重要になっています。ツールの 1 つは PHPUnit です。PHPUnit は、テスト ケースを迅速かつ効率的に実行し、視覚的なテスト レポートを生成できる人気のある PHP テスト フレームワークです。この記事では、PHPUnit を使用してテストカバレッジ分析と比較を実装する方法を紹介します。
1.テストカバレッジとは何ですか?
テスト カバレッジとは、テスト ケースによるプログラム コードの実行パスのカバレッジ、つまり、ユース ケースの実行時に実行されるコードの割合を指します。これはテストの品質を示す重要な指標です。実際の開発では、テストカバレッジはステートメントカバレッジ、分岐カバレッジ、条件カバレッジ、パスカバレッジに分けられるのが一般的です。ステートメント カバレッジは最も基本的なものであり、実装が最も簡単です。
2. PHPUnit を使用してテスト カバレッジ分析を実装する
PHPUnit は、コード カバレッジ情報を収集し、レポートを生成するために使用できる、非常に便利なテスト カバレッジ分析ツール PHPUnit_Coverage を提供します。 PHPUnit_Coverage はデフォルトで xdebug 拡張機能をサポートしているため、PHPUnit_Coverage を使用してテスト カバレッジを分析する前に、xdebug 拡張機能がインストールされていることを確認する必要があります。インストールされていない場合は、最初に PECL を介して xdebug をインストールする必要があります。 xdebug のインストール後、php.ini ファイルに次の設定を追加する必要があります。
[xdebug] zend_extension="/usr/local/opt/php@7.3/pecl/20180731/xdebug.so" xdebug.coverage_enable=On xdebug.profiler_enable_trigger=On xdebug.profiler_output_name="%R.%U" xdebug.profiler_output_dir="/tmp"
上記の設定は、xdebug のカバレッジ分析機能とコードパフォーマンス分析機能を有効にし、分析結果の自動出力を有効にするためのものです。
次に、コード カバレッジ ジェネレーターを phpunit.xml に追加し、coverage.xml ファイルを生成するパスを指定する必要があります。
<coverage> <include> <directory suffix=".php">./src</directory> </include> <report> <clover outputFile="build/logs/clover.xml"/> <html outputFile="build/coverage"/> <text outputFile="build/logs/coverage.txt"/> <text outputFile="build/logs/coverage.xml"/> </report> <logging> <log type="coverage-html" target="build/coverage"/> </logging> </coverage>
PHPUnit テスト ケースを実行するときに、 -- Coverage を追加します。 -html=build/coverage コマンド ライン パラメーターは、コード カバレッジ レポートを自動的に生成できます。
3. PHPUnit を使用してテスト カバレッジの比較を実現します
テスト カバレッジの比較とは、テスト ケースの変更を理解するために 2 つのバージョンのテスト カバレッジ レポートを比較することを指します。 PHPUnit は、この機能を実装するためのテスト カバレッジ比較ツール SebastianBergmannDiff を提供します。 SebastianBergmannDiff を使用してテスト カバレッジを比較するのは簡単で、次の手順に従うだけです:
1. SebastianBergmannDiff パッケージをインストールします
composer require sebastian/diff
2. 比較メソッド
public function testCoverage() { $oldCoverage = new PHP_CodeCoverage(); $oldCoverage->append($this->getCoverageData('old_coverage.xml')); $newCoverage = new PHP_CodeCoverage(); $newCoverage->append($this->getCoverageData('new_coverage.xml')); $diff = $this->compareCoverages($oldCoverage, $newCoverage); $this->assertEmpty($diff, 'Coverage has not changed.'); } private function compareCoverages(PHP_CodeCoverage $oldCoverage, PHP_CodeCoverage $newCoverage): string { $oldReport = new CodeCoverageReportHtmlFacade; $oldReport->process($oldCoverage, '/tmp/old-coverage'); $newReport = new CodeCoverageReportHtmlFacade; $newReport->process($newCoverage, '/tmp/new-coverage'); $oldXml = $this->getXml('/tmp/old-coverage/index.html'); $newXml = $this->getXml('/tmp/new-coverage/index.html'); $differ = new SebastianBergmannDiffDiffer; return $differ->diff($oldXml, $newXml); } private function getXml(string $file): SimpleXMLElement { return simplexml_load_string(file_get_contents($file), 'SimpleXMLElement', LIBXML_NOCDATA); } private function getCoverageData(string $filename): array { $result = []; $xml = file_get_contents($filename); $coverage = new PHP_CodeCoverage(); $coverage->setDataToBeUnserialized($xml); $filter = $coverage->getFilter(); $filter->addDirectoryToWhitelist('/app'); $filter->addDirectoryToWhitelist('/tests'); foreach ($coverage->getData() as $filename => $data) { $result[$filename] = [ 'executed' => $data['executedLines'], 'unexecuted' => $data['executableLines'] - $data['executedLines'] ]; } return $result; }
をコード内に記述します。まず古いバージョンと新しいバージョンのテスト カバレッジ レポートをロードし、compareCoverages メソッドで比較します。比較結果が空の場合は、テスト カバレッジが変更されていないことを意味します。
4. 概要
この記事では、PHPUnit を使用してテスト カバレッジ分析と比較を実装する方法を紹介します。テスト カバレッジはソフトウェア テストの重要な指標の 1 つであり、開発者がテスト ケースのカバレッジを評価するのに役立ち、それによってコードの品質と保守性が向上します。 PHPUnit は、豊富なテスト ツールとレポート ジェネレーターを提供する人気の PHP テスト フレームワークで、テスト カバレッジの分析と比較を完全にサポートできます。
以上がPHP と PHPUnit を使用したテストカバレッジの分析と比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。