最近仕事にゆとりができたので、TDD(テスト駆動開発)の勉強として、PHPUnitを使って試そうとしたところ、見事にハマったので備忘録として記載する。
0.環境
MacOS 11.5.2(Big Sur)
php 8.1.2
XAMPP
Composer 2.3.7
※ComposerとはPHPのパッケージ管理システムである。
参考:composerとは
1.ComposerでPHPUnitをインストール
まず、/Applications/XAMPP/xamppfiles/htdocs直下に、TDD用の"phpunit"ディレクトリを作成。
phpunitディレクトリ直下にcomposer.json作成。下記のプログラムを記述し、ターミナルでcomposer update
を実行。インストール後、composer.lock
とvendor
フォルダが追加されている。
{
"require-dev": {
"phpunit/phpunit": "*"
}
}
2.オートロードの設定。
今回のテストで使用するサンプルプログラムSample.php
とSampleTest.php
を加えたディレクトリ構成は下記のようになる。
phpunit
├ composer.lock
├ composer.json
├ src
├ Sample.php
├ test
├ SampleTest.php
└ vendor
├ autoload.php
└ composer...etc
<?php
namespace app;
class Sample
{
public function hello()
{
return "Hello";
}
}
<?php
use PHPUnit\Framework\TestCase;
use app\Sample;
class SampleTest extends TestCase
{
public function test_Hello()
{
$sample = new Sample();
$result = $sample->hello();
$this->assertEquals("Hello",$result);
}
}
Sample.php
には'Hello'と表示させる簡易なメソッドを用意する。
SampleTest.php
で、hello()メソッドから表示されたものが、 'Hello 'かをチェックする。
この時、Sample.php``で定義するSampleクラスを
SampleTest.phpで使えるようにするために、
composer.json```に下記のコードを追加する。
{
"require-dev": {
"phpunit/phpunit": "^9.5" //インストール後にバージョンの数字が変化
},
"autoload": {
"psr-4": {
"app\\": "src/"
}
}
}
コードを追加したらターミナルで、composer dump-autoload
コマンドを実行する。
これにより、srcディレイクトリ配下を「app」という名前空間にしていし、使用することができる。
参考:composer.jsonのautoloadの書き方参考ページ
3.テスト実行
ターミナルでphpunitディレクトリまで移動し、vendor/bin/phpunit test/
を実行。
下記のような結果となり無事成功!
PHPUnit 9.5.21 #StandWithUkraine
. 1 / 1 (100%)
Time: 00:00.004, Memory: 4.00 MB
OK (1 test, 1 assertion)