spring-boot-testing について
Spring Boot 4 アプリケーション開発者向けのテストガイダンススキルです。適切なテストスライスやツールの選択を支援し、アサーション、Testcontainers、性能、移行の資料を提供します。
主な機能
- 01テストスライスの選択ガイド
- 02MockMvcTester と RestTestClient の案内
- 03AssertJ アサーションの資料
- 04Testcontainers とテストデータの案内
- 05カバレッジとコンテキストキャッシュのヒント
活用シーン
- 01コントローラーやリポジトリーのテスト方式選択
- 02REST クライアントや JSON シリアライズのテスト
- 03遅いテストスイートの改善
- 04Spring Boot 4 への移行計画
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ github/ awesome-copilot --skill spring-boot-testingインストール後、Claude Code で/spring-boot-testingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/assertj-basics.mdassertj-collections.mdcontext-caching.mddatajpatest.mdinstancio.mdmockitobean.mdmockmvc-classic.mdmockmvc-tester.mdrestclienttest.mdresttestclient.mdsb4-migration.mdtest-slices-overview.mdtestcontainers-jdbc.mdwebmvctest.md詳細
Spring Boot テスト
このスキルでは、最新のパターンとベストプラクティスを使用して Spring Boot 4 アプリケーションをテストするための専門的なガイドを提供します。
基本原則
- テストピラミッド:ユニット(高速)>スライス(対象を絞る)>統合(全体)
- 適切なツール:信頼性を確保できる、最も範囲の狭いスライスを使用します
- AssertJ スタイル:冗長なマッチャーではなく、流暢で読みやすいアサーションを使用します
- 最新の API:従来の代替手段よりも MockMvcTester と RestTestClient を優先します
どのテストスライスを選ぶべきですか?
| シナリオ | アノテーション | リファレンス |
|---|---|---|
| コントローラーと HTTP セマンティクス | @WebMvcTest | references/webmvctest.md |
| リポジトリーと JPA クエリー | @DataJpaTest | references/datajpatest.md |
| REST クライアントと外部 API | @RestClientTest | references/restclienttest.md |
| JSON のシリアライズ/デシリアライズ | @JsonTest | references/test-slices-overview.md |
| アプリケーション全体 | @SpringBootTest | references/test-slices-overview.md |
テストスライスのリファレンス
- references/test-slices-overview.md - 判断マトリックスと比較
- references/webmvctest.md - MockMvc を使用した Web 層
- references/datajpatest.md - Testcontainers を使用したデータ層
- references/restclienttest.md - REST クライアントのテスト
テストツールのリファレンス
- references/mockmvc-tester.md - AssertJ スタイルの MockMvc(3.2+)
- references/mockmvc-classic.md - 従来の MockMvc(3.2 より前)
- references/resttestclient.md - Spring Boot 4+ の REST クライアント
- references/mockitobean.md - 依存関係のモック
アサーションライブラリー
- references/assertj-basics.md - スカラー値、文字列、ブール値、日付
- references/assertj-collections.md - リスト、セット、マップ、配列
Testcontainers
- references/testcontainers-jdbc.md - PostgreSQL、MySQL など
テストデータの生成
- references/instancio.md - 複雑なテストオブジェクトを生成する(プロパティが 3 つ以上の場合)
パフォーマンスと移行
- references/context-caching.md - テストスイートを高速化する
- references/sb4-migration.md - Spring Boot 4.0 の変更点
簡単な判断フローチャート
Testing a controller endpoint?
Yes → @WebMvcTest with MockMvcTester
Testing repository queries?
Yes → @DataJpaTest with Testcontainers (real DB)
Testing business logic in service?
Yes → Plain JUnit + Mockito (no Spring context)
Testing external API client?
Yes → @RestClientTest with MockRestServiceServer
Testing JSON mapping?
Yes → @JsonTest
Need full integration test?
Yes → @SpringBootTest with minimal context config
Spring Boot 4 の主なポイント
- RestTestClient:TestRestTemplate に代わる最新の方法
- @MockitoBean:@MockBean(非推奨)に代わるもの
- MockMvcTester:Web テスト向けの AssertJ スタイルのアサーション
- モジュール化されたスターター:テクノロジー固有のテストスターター
- コンテキストの一時停止:キャッシュされたコンテキストを自動的に一時停止します(Spring Framework 7)
テストのベストプラクティス
コードの複雑さの評価
メソッドやクラスが複雑すぎて効果的にテストできない場合:
- 複雑さを分析する - 単一のメソッドを網羅するのに 5~7 件を超えるテストケースが必要なら、複雑すぎる可能性があります
- リファクタリングを提案する - コードを、より小さく目的を絞った関数に分割することを提案します
- ユーザーが判断する - ユーザーがリファクタリングに同意した場合は、抽出する箇所の特定を支援します
- 必要に応じて続行する - ユーザーが複雑なコードのまま進めることを決めた場合は、難しくてもテストを実装します
リファクタリングの提案例:
// Before: Complex method hard to test
public Order processOrder(OrderRequest request) {
// Validation, discount calculation, payment, inventory, notification...
// 50+ lines of mixed concerns
}
// After: Refactored into testable units
public Order processOrder(OrderRequest request) {
validateOrder(request);
var order = createOrder(request);
applyDiscount(order);
processPayment(order);
updateInventory(order);
sendNotification(order);
return order;
}
コードの重複を避ける
よく使用するオブジェクトやモックのセットアップにはヘルパーメソッドを作成し、読みやすさと保守性を高めます。
@DisplayName を使ったテストの整理
テストの意図を明確にするため、説明的な表示名を使用します:
@Test
@DisplayName("Should calculate discount for VIP customer")
void shouldCalculateDiscountForVip() { }
@Test
@DisplayName("Should reject order when customer has insufficient credit")
void shouldRejectOrderForInsufficientCredit() { }
テストカバレッジの順序
テストは常に次の順序で構成します。
- メインシナリオ - ハッピーパス。最も一般的なユースケースです
- その他のパス - 有効な代替シナリオ、エッジケースです
- 例外/エラー - 無効な入力、エラー条件、失敗時の動作です
本番環境のシナリオをテストする
実際の本番環境のシナリオを想定してテストを作成します。これにより、テストがより身近になり、実際の本番環境におけるコードの動作を理解しやすくなります。
テストカバレッジの目標
品質と労力の実用的なバランスとして、コードカバレッジ80%を目指します。カバレッジをさらに高めることは有益ですが、それだけが目標ではありません。
カバレッジのレポート作成と追跡には、Jacoco maven pluginを使用します。
カバレッジのルール:
- カバレッジは最低80%
- 実行したことだけではなく、意味のあるアサーションを重視する
優先すべき項目:
- ビジネス上重要なパス(決済処理、注文の検証)
- 複雑なアルゴリズム(価格設定、割引計算)
- エラー処理(例外、エッジケース)
- 統合ポイント(外部 API、データベース)
依存関係(Spring Boot 4)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-testcontainers</artifactId>
<scope>test</scope>
</dependency>
コメント
Markdown 対応