🧪

Laravel + PHPUnitでテスト工程を爆速化させる

2021/12/04に公開約2,000字

概要

今回は単体テストを自動化させた時の備忘録をまとめます

Laravelはユニットテストも考慮して構築されています。実際、PHPUnitをサポートしており、最初から含まれています。

https://readouble.com/laravel/8.x/ja/testing.html

この記事で伝えたいこと

PHPUnitで単体テストを実装する方法

テスト対象クラス

法人名を返却する値オブジェクトを単体テストします

https://zenn.dev/chida/articles/aa2a63cdf2eb52
App\Domains\AdminCompany.php
<?php

namespace App\Domains\AdminCompany;

class AdminCompany
{
    private $adminCompanyName;

    public function __construct(
        AdminCompanyName $adminCompanyName,
    ) {
        $this->adminCompanyName = $adminCompanyName;
    }


    public function getName(): ?AdminCompanyName
    {
        return $this->adminCompanyName;
    }
}

テストコード

\Tests\Unit\Domains\AdminCompanyTest.php
<?php
namespace Tests\Unit\Domains\AdminCompany;

use App\Domains\AdminCompany\AdminCompany;
use ArgumentCountError;
use PHPUnit\Framework\TestCase;

class AdminCompanyTest extends TestCase
{

    private $adminCompanyName;

    protected function setUp(): void
    {
        // 必須
        parent::setUp();

        $this->adminCompany = new AdminCompany(
            $this->adminCompanyName = new AdminCompanyName('example'),
        );
    }

    public function test_コンストラクタに何も渡さない場合はエラーになる()
    {
        $this->expectException(ArgumentCountError::class);
        new AdminCompany();
    }

    public function test_getName_コンストラクタに正しインスタンスを渡すと渡された値を返す()
    {
        $this->assertEquals($this->adminCompanyName, $this->adminCompany->getName());
    }
}

テストを実行する

bash
./vendor/bin/phpunit

==== Redirecting to composer installed version in vendor/phpunit ====

PHPUnit 7.5.9 by Sebastian Bergmann and contributors.

..........                                                        2 / 2 (100%)

Time: 8.11 seconds, Memory: 24.00 MB
OK (2 tests, 2 assertions)

最後に

読んでいただきありがとうございます。
今回の記事はいかがでしたか?
・こういう記事が読みたい
・こういうところが良かった
・こうした方が良いのではないか
などなど、率直なご意見を募集しております。

Discussion

ログインするとコメントできます