章: 第7章: テスト拡張と品質自動化
「同じロジックだが入力値だけ変わるテスト」が何度もコピペースされている――境界値テストでよく起きるこの状態は、Pestのデータセット機能で訐決できます。
Pestの ->with() でテストデータを外卐化することで、1つの it() でNケースを検証 できます。目に見える形で境界値を網羅し、コードの重複を防げます。
なぜデータセットが重要なのか
データセットなしで境界値テストを書くと次の問題が起きます。
- 同じコードが入力値だけ変わってコピペースされ、DRY原則が崩れる
- ケースを追加するたびに新しい
it()を書く必要があり、テストファイルが膀大化する - 考慮した境界値が一目で分からない
チェックポイント:
->with()に渡す配列を別ファイルの定数として定義すると、テスト意図が書䃥化されて保守性が最高になります。
あり vs なし
| 観点 | it()コピペース |
->with()データセット |
| コード重複 | 大きい | なし |
| ケース追加 | 新しい it() |
配列に1行追加だけ |
| テスト名の分かりやすさ | 高い | 少し低い(外卐化データを読む必要) |
| 境界値一覧性 | 低い | 高い(配列を見れば一目) |
実装例
<?php
it('税込価格を計算できる', function (int $price, float $tax, int $expected) {
expect(calcTaxIncluded($price, $tax))->toBe($expected);
})->with([
[1000, 0.1, 1100],
[1200, 0.08, 1296],
[0, 0.1, 0],
]);
まとめ & 次のステップ
->with()の配列に入力値と期待値のペアを定義するだけで境界値テストが完成する- 外卐化データは定数ファイルに分離するとさらに全体の読みやすさが上がる
- 後からケース追加できるので、テストファイルの膀大化を防いで、高い網羅性を保つ
->with()+Dataset::lazy()の組み合わせで大規模データセットも常にそれできる
次回は 第14回: HTTPテストのベストプラクティス で、入力・認可・レスポンスを一連で固定するテスト設計を学びます。最初は少し難しく見えても、順番に確認すればちゃんと身についていきます。
今日の記事のポイント
Pestのデータセットを使うと、同じテストロジックを複数ケースで簡潔に検証できます。
この記事が大事な理由
境界値テストの網羅性を上げながら、重複コードを減らせるからです。
ここは「どの場面で使うのか」を結びつけると理解しやすくなります。実際のコードを動かしながら、少しずつ慣れていきましょう。
よくあるつまずき
まずは2〜3ケースだけに絞って、読みやすさを保ちながら拡張していきましょう。
「Pestデータセット活用」でつまずくときは、知識不足というより「確認の順番」が曖昧なことが多いです。最初に観点を固定すると、理解が一気に進みやすくなります。
整理しやすい観点は次の3つです。
- 何を守るテストかを明確にする: 仕様固定か実装詳細かを先に決める
- テスト粒度を揃える: FeatureとUnitの責務を混ぜない
- 壊れやすい箇所から優先する: 変更頻度の高いユースケースに先に網をかける
小さく検証するときは、次の順番で進めると詰まりにくくなります。
1. 「Pestデータセット活用」に直結する主要ケースを3件だけ先に作る
2. 失敗ケースを1件追加し、期待するエラーを明示する
3. リファクタ後に同じテストが通ることを確認する
「Pestデータセット活用」は、守りたい仕様を言語化してから書くと品質が安定します。
実際のコードのサンプル
まずは最小構成で動きを確認していきましょう。
<?php
it('税込価格を計算できる', function (int $price, float $tax, int $expected) {
expect(calcTaxIncluded($price, $tax))->toBe($expected);
})->with([
[1000, 0.1, 1100],
[1200, 0.08, 1296],
[0, 0.1, 0],
]);
この記事で身についたこと
Pestのデータセットを使うと、同じテストロジックを複数ケースで簡潔に検証できました。
今日のまとめ
Pestデータセット活用は、Laravelをより深く使うための大切な知識です。完璧を目指しすぎず、手を動かしながら少しずつ使える形にしていきましょう。
「Pestデータセット活用」を学ぶときは、実装前に「何を楽にしたいのか」「どこで失敗しやすいか」「確認結果をどう残すか」を先に言葉にしておくと理解が安定します。短いメモでも、次回の見直し時に判断材料として大きく効いてきます。
「Pestデータセット活用」で理解を深めるコツは、結果だけでなく途中の判断理由を残しておくことです。たとえば「この設定を選んだ理由」「別案を採用しなかった理由」「次に確認する項目」を短くメモしておくと、翌日に見直したときの再現性が高まります。実務ではこの記録がレビューや引き継ぎにもそのまま活用できます。
学習メモ
- サンプルをそのまま実行したあと、値や条件を1つだけ変えて結果の違いを見ていきましょう。
- 「Pestデータセット活用」について、今日の気づきを1行で残しておくと次回の理解がかなり速くなります。
- 実務に置き換えるならどの機能に使えるかを1つ書き出しておくと、学びが定着しやすくなります。