title | emoji | type | topics | published | published_at | ||||
---|---|---|---|---|---|---|---|---|---|
Laravel + PHPUnitでテスト工程を爆速化させる |
🧪 |
tech |
|
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)
読んでいただきありがとうございます。 今回の記事はいかがでしたか? ・こういう記事が読みたい ・こういうところが良かった ・こうした方が良いのではないか などなど、率直なご意見を募集しております。