spring-boot-testing
JUnit 6とAssertJを活用し、あなたの状況に最適なSpring Boot 4のテスト手法を選定・提案する、Spring Bootテストのエキスパートスキルです。ユニットテストから統合テストまで、適切なアノテーションやモック戦略を駆使して効率的なテストコードの実装をサポートします。
description の原文を見る
Expert Spring Boot 4 testing specialist that selects the best Spring Boot testing techniques for your situation with Junit 6 and AssertJ.
SKILL.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 の変更点
クイック判断ツリー
コントローラーエンドポイントをテストしている?
はい → @WebMvcTest with MockMvcTester
リポジトリクエリをテストしている?
はい → @DataJpaTest with Testcontainers (実際の DB)
サービスのビジネスロジックをテストしている?
はい → プレーン JUnit + Mockito (Spring コンテキストなし)
外部 API クライアントをテストしている?
はい → @RestClientTest with MockRestServiceServer
JSON マッピングをテストしている?
はい → @JsonTest
完全な統合テストが必要?
はい → @SpringBootTest with minimal context config
Spring Boot 4 のハイライト
- RestTestClient: TestRestTemplate のモダンな代替品
- @MockitoBean: @MockBean を置き換え (非推奨)
- MockMvcTester: Web テスト用の AssertJ スタイルのアサーション
- モジュール化されたスターター: テクノロジー固有のテストスターター
- コンテキストの一時停止: キャッシュされたコンテキストの自動一時停止 (Spring Framework 7)
テストのベストプラクティス
コード複雑性の評価
メソッドまたはクラスがテストするには複雑すぎる場合:
- 複雑性を分析する - 単一メソッドをカバーするために 5~7 以上のテストケースが必要な場合、コードが複雑すぎる可能性があります
- リファクタリングを推奨する - コードをより小さく、焦点を絞った関数に分割することを提案します
- ユーザーの決定 - ユーザーがリファクタリングに同意した場合、抽出ポイントの特定を支援します
- 必要に応じて続行する - ユーザーが複雑なコードでの継続を決定した場合、困難を伴ってもテストを実装します
リファクタリング推奨の例:
// 前: テストしにくい複雑メソッド
public Order processOrder(OrderRequest request) {
// バリデーション、割引計算、支払い、在庫、通知...
// 50+ 行の混在した関心事
}
// 後: テスト可能なユニットにリファクタリング
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 プラグインを使用してください。
カバレッジルール:
- 最小 80% 以上のカバレッジ
- 実行だけではなく、意味のあるアサーションに焦点を当てる
優先事項:
- ビジネスクリティカルなパス (支払い処理、注文検証)
- 複雑なアルゴリズム (価格設定、割引計算)
- エラーハンドリング (例外、エッジケース)
- 統合ポイント (外部 API、データベース)
依存関係 (Spring Boot 4)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- WebMvc テスト用 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Testcontainers 用 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-testcontainers</artifactId>
<scope>test</scope>
</dependency>
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- github
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/github/awesome-copilot / ライセンス: MIT
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。