Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

spring-boot-test-patterns

Spring BootアプリケーションにおけるUnit・Integration・Slice・コンテナベースのテストパターンを、JUnit 5、Mockito、Testcontainersおよびパフォーマンス最適化を含めて包括的に提供します。テストの作成、`@Test`メソッドや`@MockBean`モックの実装、Spring Bootアプリケーション向けテストスイートの構築時に活用してください。

description の原文を見る

Provides comprehensive testing patterns for Spring Boot applications covering unit, integration, slice, and container-based testing with JUnit 5, Mockito, Testcontainers, and performance optimization. Use when writing tests, @Test methods, @MockBean mocks, or implementing test suites for Spring Boot applications.

SKILL.md 本文

Spring Boot テストパターン

概要

JUnit 5、Mockito、Testcontainers、およびパフォーマンス最適化されたスライステストパターンを使用して、Spring Boot アプリケーション向けの堅牢なテストスイートを作成するための包括的なガイダンス。

使用時機

  • サービスまたはリポジトリのユニットテストをモック化された依存関係で記述する場合
  • Testcontainers を使用した実際のデータベースによる統合テストを実装する場合
  • @WebMvcTest または MockMvc での REST API テスト
  • Spring Boot 3.5+ でのコンテナ管理用 @ServiceConnection を設定する場合

クイックリファレンス

テスト種別アノテーション目標時間ユースケース
ユニットテスト@ExtendWith(MockitoExtension.class)< 50msSpring コンテキストなしのビジネスロジック
リポジトリテスト@DataJpaTest< 100ms最小限のコンテキストでのデータベース操作
コントローラテスト@WebMvcTest / @WebFluxTest< 100msREST API レイヤーテスト
統合テスト@SpringBootTest< 500msコンテナを使用した完全なアプリケーションコンテキスト
Testcontainers@ServiceConnection / @Testcontainers可変実際のデータベース/メッセージブローカーコンテナ

コアコンセプト

テストアーキテクチャの哲学

  1. ユニットテスト — Spring コンテキストなしの高速で分離されたテスト (< 50ms)
  2. スライステスト — 特定のレイヤー向けの最小限の Spring コンテキスト (< 100ms)
  3. 統合テスト — 実際の依存関係を持つ完全な Spring コンテキスト (< 500ms)

主要なアノテーション

Spring Boot テスト:

  • @SpringBootTest — 完全なアプリケーションコンテキスト (控えめに使用)
  • @DataJpaTest — JPA コンポーネントのみ (リポジトリ、エンティティ)
  • @WebMvcTest — MVC レイヤーのみ (コントローラ、@ControllerAdvice)
  • @WebFluxTest — WebFlux レイヤーのみ (リアクティブコントローラ)
  • @JsonTest — JSON シリアライゼーションコンポーネントのみ

Testcontainers:

  • @ServiceConnection — Testcontainer を Spring Boot に接続 (3.5+)
  • @DynamicPropertySource — 実行時に動的プロパティを登録
  • @Testcontainers — Testcontainers ライフサイクル管理を有効化

説明

1. ユニットテストパターン

モック化された依存関係を使用してビジネスロジックをテストします:

@ExtendWith(MockitoExtension.class)
class UserServiceTest {
    @Mock
    private UserRepository userRepository;

    @InjectMocks
    private UserService userService;

    @Test
    void shouldFindUserByIdWhenExists() {
        when(userRepository.findById(1L)).thenReturn(Optional.of(user));
        Optional<User> result = userService.findById(1L);
        assertThat(result).isPresent();
        verify(userRepository).findById(1L);
    }
}

詳細なパターンについては unit-testing.md を参照してください。

2. スライステストパターン

特定のレイヤー向けの焦点化されたテストスライスを使用:

@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@TestContainerConfig
class UserRepositoryIntegrationTest {
    @Autowired
    private UserRepository userRepository;

    @Test
    void shouldSaveAndRetrieveUser() {
        User saved = userRepository.save(user);
        assertThat(userRepository.findByEmail("test@example.com")).isPresent();
    }
}

すべてのスライスパターンについては slice-testing.md を参照してください。

3. REST API テストパターン

MockMvc でコントローラをテスト:

@WebMvcTest(UserController.class)
class UserControllerTest {
    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private UserService userService;

    @Test
    void shouldGetUserById() throws Exception {
        mockMvc.perform(get("/api/users/1"))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.email").value("test@example.com"));
    }
}

4. @ServiceConnection を使用した Testcontainers

Spring Boot 3.5+ でコンテナを設定:

@TestConfiguration
public class TestContainerConfig {
    @Bean
    @ServiceConnection
    public PostgreSQLContainer<?> postgresContainer() {
        return new PostgreSQLContainer<>("postgres:16-alpine");
    }
}

テストクラスで @Import(TestContainerConfig.class) を適用してください。 詳細な設定については testcontainers-setup.md を参照してください。

5. 依存関係を追加

必要なテスト用依存関係を含めます:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>1.19.0</version>
    <scope>test</scope>
</dependency>

完全な依存関係リストについては test-dependencies.md を参照してください。

6. CI/CD を設定

自動テスト用 GitHub Actions を設定:

name: Tests
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    services:
      docker:
        image: docker:20-dind
    steps:
    - uses: actions/checkout@v4
    - name: Set up JDK 17
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
    - name: Run tests
      run: ./mvnw test

完全な CI/CD パターンについては ci-cd-configuration.md を参照してください。

検証チェックポイント

テストを実装した後、以下を確認してください:

  • コンテナが実行中: docker ps (testcontainer イメージを探す)
  • コンテキスト読み込み: スタートアップログで「Started Application in X.XX seconds」を確認
  • テスト分離: テストを個別に実行して交差汚染がないことを確認

@ServiceConnection を使用した完全な統合テスト

@SpringBootTest
@Import(TestContainerConfig.class)
class OrderServiceIntegrationTest {

    @Autowired
    private OrderService orderService;

    @Autowired
    private UserRepository userRepository;

    @Test
    void shouldCreateOrderForExistingUser() {
        User user = userRepository.save(User.builder()
            .email("order-test@example.com")
            .build());

        Order order = orderService.createOrder(user.getId(), List.of(
            new OrderItem("SKU-001", 2)
        ));

        assertThat(order.getId()).isNotNull();
        assertThat(order.getStatus()).isEqualTo(OrderStatus.PENDING);
    }
}

実際のデータベースを使用した @DataJpaTest

@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@TestContainerConfig
class UserRepositoryTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    void shouldFindByEmail() {
        userRepository.save(User.builder()
            .email("jpa-test@example.com")
            .build());
        assertThat(userRepository.findByEmail("jpa-test@example.com"))
            .isPresent();
    }
}

完全なエンドツーエンド例については workflow-patterns.md を参照してください。

ベストプラクティス

  • 適切なテスト種別を使用する: リポジトリには @DataJpaTest、コントローラには @WebMvcTest、完全な統合にのみ @SpringBootTest
  • Spring Boot 3.5+ で @ServiceConnection を優先: @DynamicPropertySource よりクリーンなコンテナ管理
  • テストを確定的に保つ: @BeforeEach ですべてのテストデータを明示的に初期化
  • レイヤー別に整理: レイヤー別にテストをグループ化してコンテキストキャッシュを最大化
  • Testcontainers を JVM レベルで再利用: withReuse(true) + TESTCONTAINERS_REUSE_ENABLE=true
  • @DirtiesContext を回避: コンテキストの再構築を強制し、パフォーマンスを大きく低下させる
  • 外部サービスはモック化: 実際のデータベースは必要な場合のみ使用
  • パフォーマンス目標: ユニット < 50ms、スライス < 100ms、統合 < 500ms

制約と警告

  • 絶対必要でない限り @DirtiesContext を使用しないでください (コンテキスト再構築を強制)
  • @MockBean を異なる設定と混在させないでください (別のコンテキストが生成される)
  • Testcontainers には Docker が必要です; CI/CD パイプラインが Docker をサポートしていることを確認してください
  • テスト実行順序に依存しないでください; 各テストは独立している必要があります
  • @TestPropertySource に注意してください (別のコンテキストが生成される)
  • ユニットテストに @SpringBootTest を使用しないでください; 代わりにプレーンな Mockito を使用してください
  • コンテキストキャッシュは異なる @MockBean 設定で無効化される可能性があります
  • テスト内で静的可変状態を避けてください (テスト失敗の原因となる)

リファレンス

  • test-dependencies.md — Maven/Gradle テスト依存関係
  • unit-testing.md — Mockito パターンを使用したユニットテスト
  • slice-testing.md — リポジトリ、コントローラ、JSON スライステスト
  • testcontainers-setup.md — Testcontainers 設定パターン
  • ci-cd-configuration.md — GitHub Actions、GitLab CI、Docker Compose
  • api-reference.md — 完全なテストアノテーションとユーティリティ
  • best-practices.md — テストパターンと最適化
  • workflow-patterns.md — 完全な統合テスト例

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
giuseppe-trisciuoglio
リポジトリ
giuseppe-trisciuoglio/developer-kit
ライセンス
MIT
最終更新
不明

Source: https://github.com/giuseppe-trisciuoglio/developer-kit / ライセンス: MIT

関連スキル

汎用その他⭐ リポ 1,982

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

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

by Jimmy-Holiday
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: giuseppe-trisciuoglio · giuseppe-trisciuoglio/developer-kit · ライセンス: MIT