PHP 単体テスト カバレッジのベスト プラクティスには、PHPUnit の CodeCoverage ツールの使用、単体テストの分離、モック オブジェクトとスタブの使用、すべてのブランチとパスのカバー、自動ジェネレーターの使用が含まれます。これらのベスト プラクティスを通じて、アプリケーションの品質と信頼性を向上させることができます。
PHP 単体テスト: テスト カバレッジのベスト プラクティス
ソフトウェア開発では、テスト カバレッジはテスト スイートの有効性の尺度です。テストされたコードの割合を表します。高いテストカバレッジは、アプリケーションの品質と信頼性の向上に役立ちます。 PHP 単体テストのテスト カバレッジを向上させるためのベスト プラクティスをいくつか紹介します。
PHPUnit の CodeCoverage ツールを使用する
PHPUnit には、テスト実行中にカバーされるファイルと行を生成できる組み込みの CodeCoverage ツールが用意されています。これを使用するには、PHPUnit.xml 構成ファイルに次のコードを追加します。
<phpunit backupGlobals="false" backupStaticAttributes="false" bootstrap="vendor/autoload.php" colors="true" verbose="true" coverageClover="coverage.clover"> </phpunit>
分離単体テスト
分離単体テストは、分離された環境でのみ各メソッドまたはクラスをテストします。これは @dataProvider
注解或 PHPUnit 的 setUp()
和 tearDown()
メソッドを使用して実現できます。
public function dataProvider() { return [ ['input' => 1, 'expected' => 2], ['input' => 2, 'expected' => 4] ]; } /** * @dataProvider dataProvider */ public function testSum(int $input, int $expected) { $this->assertEquals($expected, $this->sum($input)); }
モック オブジェクトとスタブの使用
モック オブジェクトとスタブを使用して依存関係を模擬することができ、それによって単体テストを分離し、テスト カバレッジを向上させることができます。
$calculatorMock = $this->createMock(Calculator::class); $calculatorMock->expects($this->once()) ->method('sum') ->with(1, 2) ->will($this->returnValue(3)); $this->assertEquals(3, $calculator->sum(1, 2));
すべてのブランチとパスをカバーする
テストが考えられるすべてのコード パスとブランチをカバーしていることを確認してください。条件ステートメント、ループ、例外処理を使用して、テストの複雑さを高めます。
自動生成ツールを使用する
テストコードは、PhpMetrics や PHPCS などのツールを使用して自動的に生成できます。これらのツールはコードを分析し、対応するテスト ケースを生成することで、カバレッジを向上させることができます。
実際のケース
次の PHP コードを考えてみましょう:
<?php class Calculator { public function sum(int $a, int $b) { if ($a < 0 || $b < 0) { throw new InvalidArgumentException('Input should be non-negative.'); } return $a + $b; } }
すべてのコード パスをカバーする単体テストは次のとおりです:
<?php use PHPUnit\Framework\TestCase; class CalculatorTest extends TestCase { public function dataProvider() { return [ [-1, 2, 'InvalidArgumentException'], [1, -2, 'InvalidArgumentException'], [1, 2, 3] ]; } /** * @dataProvider dataProvider */ public function testSum(int $a, int $b, $expected) { $calculator = new Calculator(); if (is_a($expected, 'InvalidArgumentException')) { $this->expectException($expected); } $this->assertEquals($expected, $calculator->sum($a, $b)); } }
以上がPHP 単体テスト: テスト カバレッジのベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。