ホームページ  >  記事  >  バックエンド開発  >  PHP 開発: PHPUnit を使用した自動テスト

PHP 開発: PHPUnit を使用した自動テスト

PHPz
PHPzオリジナル
2023-06-15 20:35:301507ブラウズ

ソフトウェア開発の急速な発展に伴い、自動テストはますます人気のあるテスト方法になりました。自動テストは、開発者がより迅速にテストし、さまざまなテスト シナリオやユース ケースをより包括的にカバーするのに役立ちます。 PHP 開発も例外ではなく、PHPUnit は PHP 開発で最も人気のある自動テスト ツールの 1 つです。この記事では、PHPUnit を使用して自動テストを実装する方法を紹介します。

1. PHPUnit の概要

PHPUnit は、Sebastian Bergmann によって開発された人気のある PHP テスト フレームワークです。これは、PHP 開発者に、単体テストを作成して実行するための簡単、高速、信頼性の高い方法を提供します。 PHPUnit は、テスト駆動開発 (TDD) および動作駆動開発 (BDD) アプローチをサポートします。

2. PHPUnit のインストール

PHPUnit を使用する前に、PHP と Composer がインストールされていることを確認する必要があります。ターミナルまたはコマンド ライン ウィンドウを開き、次のコマンドを使用して PHPUnit と PHPUnit が依存するコンポーネントをインストールします:

composer require --dev phpunit/phpunit

インストールが成功したら、次のコマンドを実行して PHPUnit のバージョンを確認できます:

./vendor/bin/phpunit --version

3. テスト ケースを作成する

PHPUnit を使用する前に、テスト ケースを作成する必要があります。テスト ケースには通常、次の 3 つの部分が含まれます。

  1. テストに必要なデータとオブジェクトを準備する
  2. テスト メソッドを実行する
  3. テスト結果が期待を満たしているかどうかを確認する

以下はサンプル テスト ケースです:

<?php

use PHPUnitFrameworkTestCase;

class MyMathTest extends TestCase
{
    public function testAddition()
    {
        $myMath = new MyMath();
        $result = $myMath->add(2, 2);
        $this->assertEquals(4, $result);
    }
}

class MyMath {
    public function add($a, $b) {
        return $a + $b;
    }
}

上記のテスト ケースでは、PHPUnit の TestCase クラスを継承する MyMathTest という名前のテスト クラスを作成しました。 testAddition() メソッドは加算計算を実行し、結果が予想される結果と等しいかどうかをアサートします。 MyMath クラスでは、加算演算を実行する add() メソッドを定義します。

4. テスト ケースの実行

テスト ケースの作成が完了したら、次のコマンドを使用してテストを実行できます:

./vendor/bin/phpunit MyMathTest.php

実行が完了すると、PHPUnit はテスト結果を出力します。テスト ケースが失敗した場合、PHPUnit は詳細な失敗情報を表示し、開発者が問題を迅速に特定できるようにします。

5. データ プロバイダーの使用

メソッドをテストするために、複数のテスト データ セットを実行する必要がある場合があります。 PHPUnit は、このようなテスト ケースをより簡単に作成できるデータ プロバイダー メカニズムを提供します。以下に例を示します。

<?php

use PHPUnitFrameworkTestCase;

class MyMathTest extends TestCase
{
    /**
     * @dataProvider additionDataProvider
     */
    public function testAddition($a, $b, $expected)
    {
        $myMath = new MyMath();
        $result = $myMath->add($a, $b);
        $this->assertEquals($expected, $result);
    }

    public function additionDataProvider() {
        return [
            [1, 2, 3],
            [0, 0, 0],
            [-1, -1, -2],
        ];
    }
}

class MyMath {
    public function add($a, $b) {
        return $a + $b;
    }
}

上記のテスト ケースでは、@DataProvider アノテーションを使用しました。これは、addDataProvider() メソッドを使用してテスト データを提供するように PHPunit に指示します。このメソッドは、複数のテスト データ セットを含む配列を返します。テスト データの各セットには、2 つのオペランドと予想される計算結果が含まれています。 testAddition() メソッドでは、$dataProvider を使用して、提供されたテスト データを使用できます。

6. モック オブジェクトの使用

テスト ケースを作成するときにオブジェクトをシミュレートする必要がある場合、PHPUnit が提供する Mock オブジェクトを使用できます。 Mock オブジェクトは、オブジェクトまたはインターフェイスをシミュレートし、そのメソッドが呼び出されたときに事前定義された値を返すことができます。

以下は例です:

<?php

use PHPUnitFrameworkTestCase;

class MyDatabaseTest extends TestCase
{
    public function testInsert()
    {
        $mock = $this->getMockBuilder('Database')
                     ->getMock();

        $mock->expects($this->once())
             ->method('insert')
             ->will($this->returnValue(true));

        $myDatabase = new MyDatabase($mock);
        $result = $myDatabase->insert('username', '123456');
        $this->assertTrue($result);
    }
}

class MyDatabase {
    private $database;

    public function __construct($database) {
        $this->database = $database;
    }

    public function insert($username, $password)
    {
        return $this->database->insert('users', [
            'username' => $username,
            'password' => md5($password),
        ]);
    }
}

class Database {
    public function insert($table, $data) {
        // Insert data into the database
    }
}

上記のテスト ケースでは、getMockBuilder() メソッドを使用して Database クラスの Mock オブジェクトを作成し、Mock オブジェクトの動作を指定します。 testInsert() メソッドでは、MyDatabase オブジェクトを作成し、コンストラクターを通じて Mock オブジェクトを MyDatabase オブジェクトに渡します。 MyDatabase の insert() メソッドで、Mock オブジェクトの insert() メソッドを呼び出します。

概要

自動テストに PHPUnit を使用する場合は、最初にテスト コードを記述し、次にテスト カバレッジを向上させる実装コードを記述するプロセスに従うことをお勧めします。テスト ケースを作成するときは、できるだけ多くのシナリオとユース ケースをカバーする必要があります。同時に、データプロバイダーやモックオブジェクトなどの関数を使用して、テストケースを最適化し、テスト効率を向上させることもできます。

以上がPHP 開発: PHPUnit を使用した自動テストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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