ホームページ >バックエンド開発 >PHPチュートリアル >PHP 単体テスト: テスト カバレッジのベスト プラクティス

PHP 単体テスト: テスト カバレッジのベスト プラクティス

WBOY
WBOYオリジナル
2024-06-02 19:40:02312ブラウズ

PHP 単体テスト カバレッジのベスト プラクティスには、PHPUnit の CodeCoverage ツールの使用、単体テストの分離、モック オブジェクトとスタブの使用、すべてのブランチとパスのカバー、自動ジェネレーターの使用が含まれます。これらのベスト プラクティスを通じて、アプリケーションの品質と信頼性を向上させることができます。

PHP 単体テスト: テスト カバレッジのベスト プラクティス

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。