Skip to content

Latest commit

 

History

History
118 lines (86 loc) · 2.83 KB

d4c56ba1d20735.md

File metadata and controls

118 lines (86 loc) · 2.83 KB
title emoji type topics published published_at
Laravel + PHPUnitでテスト工程を爆速化させる
🧪
tech
laravel
phpunit
ddd
unittest
true
2021-12-05 01:11

概要

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

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

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

この記事で伝えたいこと

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

テスト対象クラス

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

https://zenn.dev/chida/articles/aa2a63cdf2eb52

<?php

namespace App\Domains\AdminCompany;

class AdminCompany
{
    private $adminCompanyName;

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


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

テストコード

:::message テストクラスに独自のsetUpメソッドを定義する場合は、親のクラスのparent::setUp()/parent::tearDown()を確実に呼び出してください :::

<?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());
    }
}

テストを実行する

./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)

最後に

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