【PHP】MacでPHPUnitを利用する方法(Composer)




Mac環境でPHPUnitを利用する方法を学習したので、備忘録に記事に残しておきます。

こちらの内容は「PHPUnit で PHP コードのユニットテストを行う」(エレパスタッフブログ)を参考にさせていただきました。

1. 開発用ディレクトリを作成

Composerは既にインストールされている前提で進めます。今回の開発ディレクトリは以下の構成です。

srcディレクトリはテスト対象のプログラム、testディレクトリにはテストコードが入ります。

2. 開発用ディレクトリdevelopにPHPUnitを導入

以下のcomposer.jsonを作成して、developディレクトリに置きます。

次のコマンドをターミナルで実行します。するとvendorディレクトリと、composer.lockというファイルが生成されます。

パスを通す場合は、ホームディレクトリの.bash_profileに以下を記載して反映します。

パスを通すことで、developディレクトリにインストールしたphpunitを、ターミナル上で「phpunit」と打つだけで実行できます。パスを通さない場合は、「~/develop/vendor/bin/phpunit」と毎回打つ必要があります。

3. autoloadの設定

テストを行うときは、test/からsrc/を読みに行くため、autoloadを設定して自動読み込み出来るようにしておきます。composer.jsonを次のように変更します。

ここで、psr-4はautoloadの仕様名、User\\は名前空間をUserに設定し、src/はautoload対象のディレクトリ名を示しています。

composer.jsonの変更を反映させるには、ターミナルでcomposer updateが必要ですが、autoloadに関する変更のみであればcomposer dumpautoloadでOKです。

4. テスト対象のコードを書く

src/User.phpを作成して保存します。

このクラスは、ファーストネームとラストネームを引数として受け取り、半角スペースを挟んで文字列結合したものを返すというgetFullNameメソッドを実装したシンプルなものです。

5. テストコードを書く

test/UserTest.phpを作成します。

3行目ですが、基本的にPHPUnitではTestCaseクラスを継承して利用するためuseでインポートしています。テスト対象は名前空間UserのクラスUserですので、4行目でインポートしています。

assertSame()は第1引数に正解の値、第2引数にテストしたい対象を入れます。第1引数と第2引数に対して厳密な比較を行う、TrueかFalseを返します。ゆるい比較はassertEquals()メソッドを使います。

6. 実行

最後にターミナルで実行します。

結果が表示されました。テストを1回行い、1回成功しているので無事終了です。

公式ドキュメント

https://phpunit.readthedocs.io/ja/latest/index.html

日本語対応していてありがたいですね。