PHPUnitで単体テストを書いてみる

2024.03.12 09:00
2024.03.18 11:16
PHPUnitで単体テストを書いてみる

PHPUnitで単体テストを書いてみました。
フレームワークなどは特に使わないパターンです。

1. インストール

まずはインストールです。コンソールで対象のディレクトリに移動し、
以下を実行します。

※前提としてcomposerが必要なのですが、すでに入っている想定

composer require phpunit/phpunit --dev

composer.jsonができました。
中身はこんな感じです。

{
    "require-dev": {
        "phpunit/phpunit": "^10.5"
    }
}

同時にvendorフォルダもできて、ライブラリはすべてそこに入っているようですね。
ちゃんと動くか確認してみます。

vendor/bin/phpunit --version
PHPUnit 10.5.12 by Sebastian Bergmann and contributors.

こんな感じでちゃんと動きましたね。

2. テストを書く

実際にテストを書いてみます。
まずはテスト対象のクラス。

// Hoge.php

<?php

class Hoge {
  public function hoge(string $value): bool
  {
    if($value !== '') {
      return true;
    } else {
      return false;
    }
  }
}

次にコレのテストです。
「test」ディレクトリを作って、その中に「HogeTest.php」作ります。
「クラス名+Test.php」ってのはルールっぽいですね。

// HogeTest.php

<?php 

use PHPUnit\Framework\TestCase;

// テストしたいクラスをインポート
require_once './Hoge.php';

class HogeTest extends TestCase
{
    // ---------------------------------------------------------------------
    // 準備
    // ---------------------------------------------------------------------

    private $testClass;

    public function setUp() :void{
        // 必ず親クラスのsetUpを呼んでおくこと
        parent::setUp();

        // テスト対象のクラスインスタンスを作成
        $this->testClass = new Validation();
    }

    // ---------------------------------------------------------------------
    // メソッドテスト
    // ---------------------------------------------------------------------
    public function test_check_true()
    {
        $result = $this->testClass->hoge('test');
        $this->assertTrue($result);
    }

    public function test_check_false()
    {
        $result = $this->testClass->hoge('');
        $this->assertFalse($result);
    }
}

実行します。

vendor/bin/phpunit test

OKがでたら無事テストが通りました。
今回は以上です!