PHPのPHPUnitを使ってテストコードを書く方法【初心者向け】

初心者向けにPHPのPHPUnitを使ってテストコードを書く方法について解説しています。Laravelアプリケーションを例にテストの書き方を紹介します。実際にソースコードを書いて説明しているので、ぜひ参考にしてみてください。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事が4,000以上あります。現役エンジニアの方はこちらをご覧ください。

PHPのPHPUnitを使ってテストコードを書く方法について解説します。

テストを実行する際の書き方を紹介しているので、ぜひ理解しておきましょう。

 

そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプPHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、PHPに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PHPのPHPUnitを使ってテストコードを書く方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

PHPUnitとは

PHPUnitは単体テスト ツールと呼ばれるものです。

プログラムの信頼性を高めることは、システム開発において重要な課題です。しかし「バグのないプログラムは無い」と言われるほど信頼性を高めることは難しいものです。それでも信頼性を高めるためには、出来上がったシステムをテストすることが解決策のひとつとなります。

また、テストは一度実行すればよいというものではありません。軽微な変更であっても影響範囲が想定外に大きくなり、重大なインシデントにつながる可能性もあります。

そのため、すべての要求仕様が満たされているか繰り返しテストしていくことになります。人間がテストをすると手間も時間もかかり、何度も繰り返しているとヌケモレが発生してテストの制度が悪くなることも懸念されます。そのような事態を避ける手段としてテストの自動化があります。

テストの自動化をサポートするツールとしてPHPUnitが活用できます。

 

PHPUnitでテストコードを書く方法

人気のPHPフレームワークであるLaravelにも標準でPHPUnitが採用されています。

ここでは、Laravelアプリケーションを例にテストの書き方を紹介します。

Laravelのプロジェクトを作った時に含まれていますので特に何かインストールする必要はありません。
テストプログラムの雛形を作るコマンドがありますので、そちらを利用してみます。

$ php artisan make:test MyTest
Test created successfully.

このコマンドでtests/Feature/MyTest.phpファイルが作成されてテストの準備ができました。

ファイルにはtestExample関数だけがある状態です。

 

以下がテストを実行するメソッドになります。

$this->assertTrue(true);

PHPUnitには$this->assert~~~という名前のメソッドが多数存在し色々なテストができるようになっています。全部は紹介しきれませんので詳しくは公式サイトなどで調べてみてください。

assertTrue関数は引数の値が真で有ることを調べています。

もしも真ではない値だった場合はテストが不合格だったことをレポートします。

 

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

ソースコード

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;

class MyTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
 public function testExample()
 {
   $user = new \App\User;
   $user->name = "山田";
   $user->email = "yamada@test.com";
   $user->password = \Hash::make('password');
   $user->save();

   $readUser = \App\User::where('name', '山田')->first();
   $this->assertNotNull($readUser);            // データが取得できたかテスト
   $this->assertTrue(\Hash::check('password', $readUser->password)); // パスワードが一致しているかテスト

   \App\User::where('email', 'yamada@test.com')->delete(); // テストデータの削除
  }
}

実行結果

$ vendor/bin/phpunit tests/Feature/MyTest.php
PHPUnit 6.5.12 by Sebastian Bergmann and contributors.
1 / 1 (100%)
Time: 577 ms, Memory: 12.00MB

OK (1 test, 2 assertions)

 

この記事を監修してくれた方

大網 清和(おおあみきよかず )
現在は派遣スタッフとして Laravel で大手ポータルサイトの開発業務をしています。

プログラム歴は長く中学生の頃から始めて35年くらいになります。古くは BASIC、C、COBOLなどを経験し SQL を集中的に使っていた時期もあります。
Web の開発はまだ2年位とあまり長くは無いですが、プログラミングの楽しさを伝えられたら良いなと思っています。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でも最短4週間でPHPやフレームワークのLaravelを使ってWebアプリケーション開発を習得できるオンラインブートキャンプPHP/Laravel講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。