mcpField
S
spring-boot-testing

spring-boot-testing

github.com/marcelorodrigoテスト・品質19215 回インストール8 週間前に更新
リポジトリ

spring-boot-testing について

spring-boot-testing は、Spring Boot 4 アプリケーションの開発者向けテストガイドです。テスト範囲とツールの選択に加え、アサーション、Testcontainers、テストデータ、性能、移行の資料をまとめています。

主な機能

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

活用シーン

  1. 01コントローラーに適したテストを選択
  2. 02データベースに対して JPA クエリをテスト
  3. 03REST クライアントと JSON シリアライズをテスト
  4. 04Spring Boot 4 のテスト移行を計画

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/marcelorodrigo/agent-skills --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 Testing

最新のパターンとベストプラクティスを用いて 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. 複雑さを分析する - 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>

コメント