mcpField
S
spring-boot-testing

spring-boot-testing

github.com/githubテスト・品質40.5k2.0k 回インストール1 日前に更新
リポジトリ

spring-boot-testing について

Spring Boot 4 アプリケーション開発者向けのテストガイダンススキルです。適切なテストスライスやツールの選択を支援し、アサーション、Testcontainers、性能、移行の資料を提供します。

主な機能

  1. 01テストスライスの選択ガイド
  2. 02MockMvcTester と RestTestClient の案内
  3. 03AssertJ アサーションの資料
  4. 04Testcontainers とテストデータの案内
  5. 05カバレッジとコンテキストキャッシュのヒント

活用シーン

  1. 01コントローラーやリポジトリーのテスト方式選択
  2. 02REST クライアントや JSON シリアライズのテスト
  3. 03遅いテストスイートの改善
  4. 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.md
assertj-collections.md
context-caching.md
datajpatest.md
instancio.md
mockitobean.md
mockmvc-classic.md
mockmvc-tester.md
restclienttest.md
resttestclient.md
sb4-migration.md
test-slices-overview.md
testcontainers-jdbc.md
webmvctest.md

詳細

Spring Boot テスト

このスキルでは、最新のパターンとベストプラクティスを使用して Spring Boot 4 アプリケーションをテストするための専門的なガイドを提供します。

基本原則

  1. テストピラミッド:ユニット(高速)>スライス(対象を絞る)>統合(全体)
  2. 適切なツール:信頼性を確保できる、最も範囲の狭いスライスを使用します
  3. AssertJ スタイル:冗長なマッチャーではなく、流暢で読みやすいアサーションを使用します
  4. 最新の API:従来の代替手段よりも MockMvcTester と RestTestClient を優先します

どのテストスライスを選ぶべきですか?

シナリオアノテーションリファレンス
コントローラーと HTTP セマンティクス@WebMvcTestreferences/webmvctest.md
リポジトリーと JPA クエリー@DataJpaTestreferences/datajpatest.md
REST クライアントと外部 API@RestClientTestreferences/restclienttest.md
JSON のシリアライズ/デシリアライズ@JsonTestreferences/test-slices-overview.md
アプリケーション全体@SpringBootTestreferences/test-slices-overview.md

テストスライスのリファレンス

テストツールのリファレンス

アサーションライブラリー

Testcontainers

テストデータの生成

  • references/instancio.md - 複雑なテストオブジェクトを生成する(プロパティが 3 つ以上の場合)

パフォーマンスと移行

簡単な判断フローチャート

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)

テストのベストプラクティス

コードの複雑さの評価

メソッドやクラスが複雑すぎて効果的にテストできない場合:

  1. 複雑さを分析する - 単一のメソッドを網羅するのに 5~7 件を超えるテストケースが必要なら、複雑すぎる可能性があります
  2. リファクタリングを提案する - コードを、より小さく目的を絞った関数に分割することを提案します
  3. ユーザーが判断する - ユーザーがリファクタリングに同意した場合は、抽出する箇所の特定を支援します
  4. 必要に応じて続行する - ユーザーが複雑なコードのまま進めることを決めた場合は、難しくてもテストを実装します

リファクタリングの提案例:

// 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() { }
テストカバレッジの順序

テストは常に次の順序で構成します。

  1. メインシナリオ - ハッピーパス。最も一般的なユースケースです
  2. その他のパス - 有効な代替シナリオ、エッジケースです
  3. 例外/エラー - 無効な入力、エラー条件、失敗時の動作です
本番環境のシナリオをテストする

実際の本番環境のシナリオを想定してテストを作成します。これにより、テストがより身近になり、実際の本番環境におけるコードの動作を理解しやすくなります。

テストカバレッジの目標

品質と労力の実用的なバランスとして、コードカバレッジ80%を目指します。カバレッジをさらに高めることは有益ですが、それだけが目標ではありません。

カバレッジのレポート作成と追跡には、Jacoco maven pluginを使用します。

カバレッジのルール:

  • カバレッジは最低80%
  • 実行したことだけではなく、意味のあるアサーションを重視する

優先すべき項目:

  1. ビジネス上重要なパス(決済処理、注文の検証)
  2. 複雑なアルゴリズム(価格設定、割引計算)
  3. エラー処理(例外、エッジケース)
  4. 統合ポイント(外部 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>

コメント