【サクッと解説】PHP PHPUnitの基本:簡単なユニットテストを書く

目次

1. 本記事のポイント

  • PHPUnitを使った基本的なユニットテストの書き方を解説
  • 実行可能なテストクラスのコード例を掲載
  • setUp/tearDownやアサーションの使い方も紹介

2. PHPUnitとは?

PHPUnitは、PHP向けの代表的なユニットテストフレームワークです。PHPで開発されたクラスや関数の振る舞いを自動的に検証するために用いられ、テスト駆動開発(TDD)やCI環境にも広く組み込まれています。

ユニットテストとは、関数やメソッドなどの「最小単位」の挙動を検証するテストのことです。PHPUnitを使うことで、仕様変更やバグ修正の影響を最小限に抑えつつ、安全にコードを改修できます。

LaravelやSymfonyなどの主要なPHPフレームワークでは、PHPUnitが標準で組み込まれており、業務システムやWebアプリケーション開発では事実上の標準となっています。

3. 詳細解説

ここでは、PHPUnitによる基本的なユニットテストの書き方を順を追って解説します。以降のコードは、PHP 8.1以上、PHPUnit 10.x環境を前提としています。

テスト対象のクラス(Calculator.php)

まずは、足し算・引き算を行う単純なクラスを用意します。

PHP
<?php
// src/Calculator.php
class Calculator {
    public function add(int $a, int $b): int {
        return $a + $b;
    }

    public function subtract(int $a, int $b): int {
        return $a - $b;
    }
}

PHPUnitテストクラスの基本構造

テストクラスはPHPUnit\Framework\TestCaseを継承します。テスト対象のクラスをインスタンス化し、各メソッドを個別にテストします。

PHP
<?php
// tests/CalculatorTest.php
use PHPUnit\Framework\TestCase;
require_once __DIR__ . '/../src/Calculator.php';

class CalculatorTest extends TestCase {
    private Calculator $calc;

    // 各テストの前に呼ばれる
    protected function setUp(): void {
        $this->calc = new Calculator();
    }

    public function testAdd(): void {
        $this->assertSame(5, $this->calc->add(2, 3));
    }

    public function testSubtract(): void {
        $this->assertSame(1, $this->calc->subtract(3, 2));
    }
}

実行方法

PHP
$ ./vendor/bin/phpunit tests/CalculatorTest.php

このように、testXXXという命名規則のメソッド内にアサーションを記述することで、各動作を検証できます。

setUp/tearDownの役割

  • setUp(): 各テスト前に必ず実行され、インスタンスや初期状態を準備します。
  • tearDown(): テスト後のクリーンアップ処理が必要な場合に使用します(今回は未使用)。

4. よくあるミス・誤解・落とし穴

  • testで始まらないメソッドはテストとして認識されません(PHPUnitの命名規約)。
  • require_onceを忘れると、クラスが見つからずエラーになります。
  • PHPUnitのバージョンによって、名前空間や初期化方法が異なるため、ドキュメントを確認することが重要です。
  • assertEqualsassertSameの違いを理解しておくべきです。前者は型変換を許容、後者は型も値も同一であることを検証します。

5. まとめ

PHPUnitはPHPにおける標準的なユニットテストツールであり、テストクラスはTestCaseを継承して記述します。

テスト対象クラスをrequire_onceで読み込み、testで始まるメソッド内にアサーションを記述することで、仕様通りの挙動かどうかを確認できます。

開発現場での品質向上やバグ防止において、PHPUnitは重要な役割を果たします。

よかったらシェアしてね!
  • URLをコピーしました!
目次