Mac環境でPHPUnitを利用する方法を学習したので、備忘録に記事に残しておきます。
こちらの内容は「PHPUnit で PHP コードのユニットテストを行う」(エレパスタッフブログ)を参考にさせていただきました。
目次
1. 開発用ディレクトリを作成
Composerは既にインストールされている前提で進めます。今回の開発ディレクトリは以下の構成です。
develop/
- src/
- test/
srcディレクトリはテスト対象のプログラム、testディレクトリにはテストコードが入ります。
2. 開発用ディレクトリdevelopにPHPUnitを導入
以下のcomposer.jsonを作成して、developディレクトリに置きます。
{
"require-dev": {
"phpunit/phpunit": "*"
}
}
次のコマンドをターミナルで実行します。するとvendorディレクトリと、composer.lockというファイルが生成されます。
composer update
パスを通す場合は、ホームディレクトリの.bash_profileに以下を記載して反映します。
export PATH="$HOME/develop/vendor/bin:$PATH"
パスを通すことで、developディレクトリにインストールしたphpunitを、ターミナル上で「phpunit」と打つだけで実行できます。パスを通さない場合は、「~/develop/vendor/bin/phpunit」と毎回打つ必要があります。
3. autoloadの設定
テストを行うときは、test/からsrc/を読みに行くため、autoloadを設定して自動読み込み出来るようにしておきます。composer.jsonを次のように変更します。
{
"require-dev": {
"phpunit/phpunit": "*"
},
"autoload": {
"psr-4": {
"User\\": "src/"
}
}
}
ここで、psr-4はautoloadの仕様名、User\\は名前空間をUserに設定し、src/はautoload対象のディレクトリ名を示しています。
composer.jsonの変更を反映させるには、ターミナルでcomposer updateが必要ですが、autoloadに関する変更のみであればcomposer dumpautoloadでOKです。
composer dumpautoload
4. テスト対象のコードを書く
src/User.phpを作成して保存します。
<?php
namespace User;
class User
{
public function getFullName($first_name, $last_name)
{
return $first_name . ' ' . $last_name;
}
}
このクラスは、ファーストネームとラストネームを引数として受け取り、半角スペースを挟んで文字列結合したものを返すというgetFullNameメソッドを実装したシンプルなものです。
5. テストコードを書く
test/UserTest.phpを作成します。
<?php
use PHPUnit\Framework\TestCase;
use User\User;
class UserTest extends TestCase
{
public function testGetFullName()
{
$user = new User();
$this->assertSame('Michael Jackson', $user->getFullName('Michael', 'Jackson'));
}
}
3行目ですが、基本的にPHPUnitではTestCaseクラスを継承して利用するためuseでインポートしています。テスト対象は名前空間UserのクラスUserですので、4行目でインポートしています。
assertSame()は第1引数に正解の値、第2引数にテストしたい対象を入れます。第1引数と第2引数に対して厳密な比較を行う、TrueかFalseを返します。ゆるい比較はassertEquals()メソッドを使います。
6. 実行
最後にターミナルで実行します。
cd develop phpunit test/ #パスを通していない場合はvendor/bin/phpunit test/ ============= PHPUnit 9.5.1 by Sebastian Bergmann and contributors. . 1 / 1 (100%) Time: 00:00.014, Memory: 4.00 MB OK (1 test, 1 assertion)
結果が表示されました。テストを1回行い、1回成功しているので無事終了です。
公式ドキュメント
https://phpunit.readthedocs.io/ja/latest/index.html
日本語対応していてありがたいですね。










