🧪
Laravel + PHPUnitでテスト工程を爆速化させる
概要
今回は単体テストを自動化させた時の備忘録をまとめます
Laravelはユニットテストも考慮して構築されています。実際、PHPUnitをサポートしており、最初から含まれています。
この記事で伝えたいこと
PHPUnitで単体テストを実装する方法
テスト対象クラス
法人名を返却する値オブジェクトを単体テストします
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