目次
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のバージョンによって、名前空間や初期化方法が異なるため、ドキュメントを確認することが重要です。
assertEquals
とassertSame
の違いを理解しておくべきです。前者は型変換を許容、後者は型も値も同一であることを検証します。
5. まとめ
PHPUnitはPHPにおける標準的なユニットテストツールであり、テストクラスはTestCase
を継承して記述します。
テスト対象クラスをrequire_once
で読み込み、test
で始まるメソッド内にアサーションを記述することで、仕様通りの挙動かどうかを確認できます。
開発現場での品質向上やバグ防止において、PHPUnitは重要な役割を果たします。