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

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

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

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

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

 

なお本記事は、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ではオンラインブートキャンプPHP/Laravelコースを提供しています。

PHPやフレームワークのLaravelを使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。