PHPUnitを利用してユニットテストを行うサンプルコード

テストフレームワークであるPHPUnitを利用して、ユニットテストを自動化する簡単なサンプルとなります。
環境
- OS CentOS 8.0.1905 (Core)
- php 7.3
- composer 1.9.1
- phpunit 8.5.1
※phpunitのインストール手順はこちら
開発用ディレクトリ作成
適当な名前で開発用のディレクトリを作成します
mkdir testdir
cd testdir
テストの対象となるsrcディレクトリとテスト用のtestディレクトリも作成します。
mkdir src
mkdir test
次にcomposer.jsonを下記の通りに作成します。
vi composer.json
{
"require-dev": {
"phpunit/phpunit": "^8.5"
},
"autoload": {
"psr-4": {
"Sample\\": "src/"
}
}
}
composer dumpautoloadを実行します。
composer dumpautoload
次にsrcディレクトリ内に下記のコードの通りに、Sample.phpを作成します。
<?php
namespace Sample;
class Sample {
// $a + $b の足し算の結果を返す
public function Add($a, $b) {
return $a + $b;
}
}
testディレクトリ配下に、下記のコードで、SampleTest.phpという名前で作成します。
<?php
require_once('vendor/autoload.php');
//クラスの後ろにTestをつける
class SampleTest extends PHPUnit\Framework\TestCase {
//test_から始まるメソッドがテストケースとして扱われる
public function test_add() {
$sample = new Sample\Sample();
// 1+2 の期待される結果は3だがとなっているためエラーが発生
$this->assertEquals(1, $sample->Add(1, 2));
// 2+2 の期待される結果を第一引数に記述
$this->assertEquals(4, $sample->Add(2, 2));
//足し算でも掛け算でも同じ4なためテストケースを追加
$this->assertEquals(5, $sample->Add(2, 3));
}
}
ディレクトリ構成は下記の通りとなります。
.
├── composer.json
├── src
│ └── Sample.php
├── test
│ └── SampleTest.php
└── vendor
├── autoload.php
└── composer
├── ClassLoader.php
├── LICENSE
├── autoload_classmap.php
├── autoload_namespaces.php
├── autoload_psr4.php
├── autoload_real.php
└── autoload_static.php
準備ができたので、テストを実行してみます。
## わかりやすいように色をつけて実行
phpunit --color test
現状のSampleTest.phpだと
// 1+2 の期待される結果は3だがとなっているためエラーが発生
$this->assertEquals(1, $sample->Add(1, 2));
でエラーが発生するため、下記のメッセージが表示されます
PHPUnit 8.5.1 by Sebastian Bergmann and contributors.
F 1 / 1 (100%)
Time: 21 ms, Memory: 4.00 MB
There was 1 failure:
1) SampleTest::test_add
Failed asserting that 3 matches expected 1.
/home/testuser/testdir/test/SampleTest.php:13
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
SampleTest.phpの期待する結果が間違っているので、下記の通りに修正します。
<?php
require_once('vendor/autoload.php');
//クラスの後ろにTestをつける
class SampleTest extends PHPUnit\Framework\TestCase {
//test_から始まるメソッドがテストケースとして扱われる
public function test_add() {
$sample = new Sample\Sample();
// 1+2 の期待される結果は3だがとなっているためエラーが発生
$this->assertEquals(3, $sample->Add(1, 2));
// 2+2 の期待される結果を第一引数に記述
$this->assertEquals(4, $sample->Add(2, 2));
//足し算でも掛け算でも同じ4なためテストケースを追加
$this->assertEquals(5, $sample->Add(2, 3));
}
}
もう一度実行します。コマンドが長いので、aliasに登録して実行してみます。
## aliasに登録
alias ut="phpunit --color test"
## 実行
ut
<出力結果>
PHPUnit 8.5.1 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 20 ms, Memory: 4.00 MB
OK (1 test, 3 assertions)
今度は、問題ないので、OKと表示されるようになります。
-
前の記事
PHPUnitインストール手順 2020.01.04
-
次の記事
Gatsby.js gatsby develop時に外部IPから接続できるように設定する 2020.01.06
コメントを書く