Anthropic Claudeソフトウェア開発⭐ リポ 299品質スコア 84/100
phpunit
Laravelのフィーチャーテストおよびユニットテストにおける、PHPUnitのテスト構造、命名規則、アサーション、ファクトリーの使用慣例について説明します。
description の原文を見る
PHPUnit test structure, naming, assertions, and factory conventions for Laravel feature and unit tests.
SKILL.md 本文
名前: PHPUnit 説明: PHPUnit のテスト構造、命名規則、アサーション、および Laravel フィーチャーテストとユニットテストのファクトリー規約。 互換エージェント: general-purpose, testing タグ: tests/**/*.php, laravel, php, testing, phpunit, unit-test, feature-test
ルール
- フィーチャーテストは
tests/Feature/に配置し、Tests\TestCaseを継承する - ユニットテストは
tests/Unit/に配置し、PHPUnit\Framework\TestCaseを継承する - データベースに関わるフィーチャーテストでは常に
Illuminate\Foundation\Testing\RefreshDatabaseを使用する - ユニットテストは Laravel ブートストラップなし — 純粋な PHP テストのみ
test_メソッドプレフィックスにスネークケースの名前を使用する:test_user_can_create_resource- すべてのテストメソッドは
: voidリターンタイプを持つ必要がある - 1 つのアサーション関心事あたり 1 つのテストメソッド — テストを焦点を当てた状態に保つ
assertEqualsよりもassertSameを優先し、厳密な型と値の比較を行う- 真偽値だけでなく、具体的な値をアサートする
- すべての新しいモデルは
database/factories/に対応するファクトリーを持つ必要がある - テストではファクトリーを使用し、手動の
create()/insert()呼び出しの代わりに使用する - 意味のあるデフォルトファクトリー値を定義し、バリエーションにはステートを使用する
例
// フィーチャーテスト
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class InvoiceControllerTest extends TestCase
{
use RefreshDatabase;
public function test_user_can_create_invoice(): void
{
$user = User::factory()->create();
$order = Order::factory()->create(['user_id' => $user->id]);
$response = $this->actingAs($user)
->postJson('/api/invoices', ['order_id' => $order->id]);
$response->assertStatus(201);
$this->assertDatabaseHas('invoices', ['order_id' => $order->id]);
}
}
// ユニットテスト — Laravel ブートストラップなし
use PHPUnit\Framework\TestCase;
class MoneyHelperTest extends TestCase
{
public function test_formats_amount_in_cents_as_currency_string(): void
{
$result = MoneyHelper::format(1000, 'CHF');
$this->assertSame('10.00 CHF', $result);
}
}
// ステート付きファクトリー
// database/factories/UserFactory.php
public function unverified(): static
{
return $this->state(fn (array $attributes) => [
'email_verified_at' => null,
]);
}
// テストでの使用
User::factory()->create();
User::factory()->unverified()->create();
アンチパターン
- データベースに書き込むフィーチャーテストで
RefreshDatabaseを使用しない - テストで
insert()またはcreate()の生の呼び出しの代わりにファクトリーを使用しない - 単一のテストメソッドで複数のアサーション関心事を混在させる
- 厳密な比較が必要な場合に
assertEqualsを使用する(assertSameを使用すべき) - 具体的な値ではなく真偽値をアサートする(
assertTrue($result !== null)) - 完全な Laravel アプリケーションをブートストラップするユニットテスト(フィーチャーテストのみで
Tests\TestCaseを使用する)
リファレンス
- PHPUnit Documentation
- Laravel Testing
- 関連:
PestTesting/SKILL.md— 推奨されるテストフレームワーク(生の PHPUnit より Pest を優先)
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- majiayu000
- ライセンス
- MIT
- 最終更新
- 2026/5/4
Source: https://github.com/majiayu000/claude-skill-registry / ライセンス: MIT