福岡拠点の永嵜です。
前回に引き続き、PHPUnitを紹介します。
今回はPHPUnitの実行手順を紹介します。実行環境は前回 Composer を使用してインストールした環境で行います。
PHPUnitの実行
PHPUnitでは理解するべき3つの要素があります。
①テスト対象クラス
ユニットテストを行うテスト対象のクラスです。
②テストケースクラス
テストケースは原則としてテスト対象クラスに対して1つ作成します。テストケース は、PHPUnit\Framework\TestCase※1 を継承して作成します。一般的にテストするクラス名の末尾に「Test」という文字列を付与したものをテストケース名とします(ファイル名はテストケースクラス名.php)。
-
- テストケースクラス名 : 「[テストするクラス名]Test」
- ファイル名 : テストケースクラス名.php
※1:vendorフォルダー配下にあります。
③テストメソッド
テストケース内に記述するメソッドです。実際にテストをする単位となります。
テストメソッドの名称は「test」で始まる文字列にする必要があります。
※@testアノテーションを使用する場合は、「test」でなくてもよいです。
では実際にテストケースを作成し、実行してみましょう。
まず、開発用ディレクトリにテスト対象クラスを格納する src ディレクトリとテストケースクラスを格納する test ディレクトリを作成します。
■テスト対象作成
テスト対象となるクラスを用意します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php namespace Sample; class AreaCalc { /** * 三角形の面積を算出 * @param int $width * @param int $height * @return double */ public static function getTriangleArea($width,$height) { return $width*$height / 2; } } |
引き数で横、高さを受け取り三角形の面積を返すクラスです。
■テストケースとテストメソッド作成
テスト対象が完成したらテストケースとテストメソッドを作成します。
test ディレクトリに AreaCalcTest.php ファイルを作成し、次のように記入します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php require_once('vendor/autoload.php'); use PHPUnit\Framework\TestCase; use Sample\AreaCalc; class AreaCalcTest extends TestCase { /** * @group getTriangleArea */ public function testGetTriangleArea() { $width = 4; $height = 2; $expected= 4; // 期待値 4×2 /2 = 4 $actual = AreaCalc::getTriangleArea($width,$height); //$expected と $actualが等しくない場合エラー $this->assertEquals($expected,$actual); } } |
このテストケースでは、$width(横)と $height(高さ)で計算した面積が正しいかをテストしています。テストメソッドではアサーションと呼ばれる結果判定メソッドを使用します。今回の例ではassertEqualsがアサーションメソッドになります。
ちなみにassertEqualsは2 つの引数が等しくない場合エラーとするメソッドです。
$expectedに想定値、$actualに実測値を設定しassertEqualsで判定しています。
図1のように開発用ディレクトリ(Sample)内にテスト対象(AreaCalc)とテストケース(AreaCalcTest)を配置しています。
■実行
phpunit コマンドを実行してユニットテストを行います。
phpunitはPHPUnitをインストールしたディレクトリのvendor\binフォルダ配下にシンボリックリンクがあります。
全てのテストケースの実行、特定のテストケースだけ実行どちらもできます。
今回はテストケースが1つですが①の方法で実行します。
①テストケースを全て実行する場合
・vendor\bin\phpunit テストケース保存フォルダ
⇒例:vendor\bin\phpunit test\
②テストケースを指定して実行する場合
・vendor\bin\phpunit テストケース指定
⇒例:vendor\bin\phpunit test\AreaCalcTest
※上記方法以外にもコマンドオプションで制御する方法があります。詳しくは PHPUnitマニュアルをご確認ください。
コマンドプロンプトを開き次のように入力します。
test ディレクトリ内のファイルをテストケースとしてテストが実行されます。
1 |
vendor\bin\phpunit test\ |
■テスト結果
テストが実行されるとテスト結果ステータス(4行目)が表示されます。
AreaCalcは正しい結果を返す状態なので( $width = 4、 $height = 2を引数で与えると4が返ってくる)テスト成功.(ドット)となっています。
1 2 3 4 5 6 7 8 |
PS C:\xampp\htdocs\Sample> vendor\bin\phpunit test\ PHPUnit 8.0.4 by Sebastian Bergmann and contributors. . 1 / 1 (100%) Time: 3.24 seconds, Memory: 4.00 MB OK (1 test, 1 assertion) |
他のステータス表示は以下のようになります。
ステータス | 意味 |
.(ドット) | テスト成功 |
F | テスト失敗 |
E | テストが危険としてマーク |
S | テストをスキップした |
I | テストが未実装 |
以上がPHPUnitによる一連のテスト手順となります。
次回は今回実行したサンプルプログラムに手を加え、
データプロバイダ機能について説明したいと思います。