PHPUnitはPHP言語向けのユニットテストフレームワークです。
この記事では、PHPUnitの基本的な使い方とPHPプロジェクトでのテストの実装方法について、初心者向けに解説します。
PHPUnitとは?
PHPUnitは、PHPで書かれたプログラムのためのテストコードを簡単に作成・実行できるツールです。
これにより、コードが予期した通りに動作するかどうかを自動的に検証することができます。
特に大規模な開発では、バグを早期に発見し、品質を保つために非常に役立ちます。
PHPUnitのインストール
PHPUnitはComposerを使って簡単にインストールできます。
ComposerはPHPの依存関係管理ツールです。
まず、以下のコマンドをプロジェクトのルートディレクトリで実行し、PHPUnitをプロジェクトに追加します。
composer require --dev phpunit/phpunit
このコマンドは、開発用の依存関係としてPHPUnitをプロジェクトに追加します。
一般的には、PHPUnitは本番環境で利用するモノではないはずです。
最初のテストケースの作成
まず、Calculatorクラスを定義します。
このクラスは足し算を行う単一のメソッドaddを持ちます。
srcディレクトリを作成し、その中に以下のようにクラスファイルを作ります。
<?php // src/Calculator.php namespace App; class Calculator { public function add($a, $b) { return $a + $b; } }
このクラスを自動的に読み込むために、composer.jsonに以下を追加しています。
"autoload": { "psr-4": { "App\\": "src/" } }
composer.jsonの変更を反映するには、以下のコマンドを実行する必要があります。
composer dump-autoload
次に、このCalculatorクラスの動作をテストするためのテストクラスを作成します。
testsディレクトリを作成し、その中に以下の内容のテストファイルを作ります。
// tests/CalculatorTest.php use PHPUnit\Framework\TestCase; use App\Calculator; // Calculatorクラスを使用 class CalculatorTest extends TestCase { public function testAdd() { $calculator = new Calculator(); $this->assertEquals(5, $calculator->add(2, 3), "Adding 2 + 3 should return 5"); } }
このテストでは、Calculatorクラスのaddメソッドが正しく2つの数値を加算できるかを確認しています。
なお、名前空間についてよくわからない場合は、次の記事をご覧ください。
テストの実行
テストを実行する前に、PHPUnitの設定ファイル(phpunit.xml)を作成しておきます。
phpunit.xmlファイルは、PHPUnitの設定をカスタマイズするための中心的なファイルです。
このファイルを使って、テストの実行方法、テストスイートの構成、出力形式などを指定することができます。
以下は、バージョン10.5.17用になります。
<?xml version="1.0" encoding="UTF-8"?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" bootstrap="vendor/autoload.php" colors="true" stopOnFailure="false" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd" cacheDirectory=".phpunit.cache"> <testsuites> <testsuite name="Unit"> <directory>tests</directory> </testsuite> </testsuites> </phpunit>
ここで重要なのは、以下のセクションです。
<testsuites> <testsuite name="Unit"> <directory>tests</directory> </testsuite> </testsuites>
セクションでは、一つまたは複数のテストスイートを定義できます。
テストスイートはテストをグループ化するためのものです。
プロジェクトの異なる部分や機能に対応するテストをまとめて管理できます。
testsuite
テストスイートの名前をname属性で指定します。
ここでは”Unit”という名前が使用されています。
directory
このテストスイートに含めるテストクラスが含まれるディレクトリを指定します。
ここではtestsディレクトリが指定されており、PHPUnitはこのディレクトリ内のテストファイルを自動的に探して実行します。
この時点のプロジェクト構成は、以下となります。
では、テストを実行します。
./vendor/bin/phpunit
これだけでも実行されます。
テストスイートを指定する場合は、以下のようなコマンドを実行します。
./vendor/bin/phpunit --testsuite Unit
実行すると、コンソールに次のような結果が表示されます。
PHPUnit 10.5.17 by Sebastian Bergmann and contributors. Runtime: PHP 8.1.12 Configuration: プロジェクトのパス\phpunit.xml . 1 / 1 (100%) Time: 00:00.004, Memory: 6.00 MB OK (1 test, 1 assertion)
今回のテストは、「OK」という結果になっています。