【PHP】PHPUnitを使う(初期セットアップとかんたんな使い方)

導入から簡単なテストコードの実行までの手順のまとめ

前提条件

composerを使ってインストールするので、composerが必要

セットアップ

$ composer global require "phpunit/phpunit:*"
$ ~/.composer/vendor/bin/phpunit --version
PHPUnit 7.5.17 by Sebastian Bergmann and contributors.

インストールされるディレクトリ

cd ~/.composer/vendor/phpunit/phpunit

テストコードの書き方

ここでは名前を保持するUserクラスのテストコードを書いてみる
  • User.php (テスト対象のモジュール)
    <?php
    class User
    {
        public $name;
        public function getName()
        {   
            return (string)$this->name;
        }   
    }
    

  • UserTest.php (テストコード例)
    1. TestCaseクラスを継承する(場所は以下)
      ~/.composer/vendor/phpunit/phpunit/src/Framework/TestCase.php
    2. testXXXXというメソッドを用意して、その中にテストコードを書く
    3. アサーションメソッドで処理結果を判定する
    <?php
    require('TestCase.php');
    require('User.php');
    use PHPUnit\Framework\TestCase;
    class UserTest extends TestCase
    {
        public function testName() {
            $params = [ 
                [null, ''],
                ['', ''],
                ['Name', 'Name'],
            ];  
            foreach ($params as $param) {
                $user = new User();
                $user->name = $param[0];
                $name = $user->getName();
                $this->assertIsString($name);
                $this->assertSame($param[1], $name);
            }   
        }   
    }
    

    アサーションメソッドについて
    判定に用いるassertXXXメソッドは様々な判定が可能で、以下にまとめられている。
    https://phpunit.readthedocs.io/ja/latest/assertions.html

テスト実施

  • OKの場合 (失敗0)
    $ ~/.composer/vendor/bin/phpunit UserTest
    PHPUnit 7.5.17 by Sebastian Bergmann and contributors.
    .                                                              1 / 1 (100%)
    Time: 53 ms, Memory: 4.00 MB
    OK (1 test, 6 assertions)
    

  • NGの場合 (失敗あり)
    テストコードの [null, ''] を [null, null] にする。
    (nullの場合はnullをそのまま返すのが正と仮定)
    $ ~/.composer/vendor/bin/phpunit UserTest
    PHPUnit 7.5.17 by Sebastian Bergmann and contributors.
    F                                                              1 / 1 (100%)
    Time: 54 ms, Memory: 4.00 MB
    There was 1 failure:
    1) UserTest::testName
    Failed asserting that '' is identical to null.
    ~/phpunit/UserTest.php:20
    FAILURES!
    Tests: 1, Assertions: 2, Failures: 1.
    
    String型かどうかの判定でエラーとなる

その他

フレームワーク内のモデルやコントローラをテストする場合、関連クラスやコンフィグなどもまとめてロードしなくてはならない。この辺を次回...

この記事へのコメント

スポンサーリンク