mcpField
J
java-testing-advanced

java-testing-advanced

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

java-testing-advanced について

java-testing-advancedは、テスト範囲を広げたいJava開発者向けのスキルです。Testcontainers、契約テスト、ミューテーションテスト、プロパティベーステストの手法を扱います。

主な機能

  1. 01Testcontainersによる統合テスト
  2. 02Pactによる契約テスト
  3. 03PITによるミューテーションテスト
  4. 04プロパティベーステストの生成

活用シーン

  1. 01実データベースを使ったテスト
  2. 02API契約の検証
  3. 03テストスイートの不足箇所の発見
  4. 04テストケースの自動生成

インストール

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

$npx skills add https://github.com/pluginagentmarketplace/custom-plugin-java --skill java-testing-advanced

インストール後、Claude Code で/java-testing-advancedを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
config.yaml
schema.json
testing-patterns.yaml
references/
GUIDE.md
PATTERNS.md
scripts/
validate.py

詳細

Java テストの高度なスキル

包括的なテストカバレッジを実現する高度なテスト手法です。

概要

このスキルでは、統合テスト向けの Testcontainers、Pact によるコントラクトテスト、PIT によるミューテーションテスト、プロパティベーステストなど、高度なテストパターンを扱います。

このスキルを使う場面

次のような場合に使用します。

  • 実際のデータベースを使ってテストする(Testcontainers)
  • API コントラクトを検証する
  • ミューテーションテストで不足箇所を見つける
  • テストケースを自動生成する

クイックリファレンス

Testcontainers
@Testcontainers
@SpringBootTest
class OrderRepositoryIT {

    @Container
    static PostgreSQLContainer<?> postgres =
        new PostgreSQLContainer<>("postgres:15")
            .withDatabaseName("test")
            .withUsername("test")
            .withPassword("test");

    @Container
    static KafkaContainer kafka =
        new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:7.4.0"));

    @DynamicPropertySource
    static void configure(DynamicPropertyRegistry registry) {
        registry.add("spring.datasource.url", postgres::getJdbcUrl);
        registry.add("spring.kafka.bootstrap-servers", kafka::getBootstrapServers);
    }

    @Test
    void shouldPersistOrder() {
        Order saved = repository.save(new Order("item", 100.0));
        assertThat(saved.getId()).isNotNull();
    }
}
コントラクトテスト(Pact)
@ExtendWith(PactConsumerTestExt.class)
class UserServiceContractTest {

    @Pact(consumer = "order-service", provider = "user-service")
    public RequestResponsePact createPact(PactDslWithProvider builder) {
        return builder
            .given("user exists")
            .uponReceiving("get user request")
                .path("/users/1")
                .method("GET")
            .willRespondWith()
                .status(200)
                .body(new PactDslJsonBody()
                    .integerType("id", 1)
                    .stringType("name", "John"))
            .toPact();
    }

    @Test
    @PactTestFor(pactMethod = "createPact")
    void testGetUser(MockServer mockServer) {
        User user = client.getUser(mockServer.getUrl(), 1L);
        assertThat(user.getName()).isEqualTo("John");
    }
}
ミューテーションテスト(PIT)
<plugin>
    <groupId>org.pitest</groupId>
    <artifactId>pitest-maven</artifactId>
    <version>1.15.0</version>
    <configuration>
        <targetClasses>
            <param>com.example.service.*</param>
        </targetClasses>
        <mutationThreshold>80</mutationThreshold>
    </configuration>
</plugin>
プロパティベーステスト
@Property
void shouldReverseListTwiceReturnsOriginal(@ForAll List<Integer> list) {
    Collections.reverse(list);
    Collections.reverse(list);
    // Original order restored
}

テストピラミッド

     /\        E2E Tests (few)
    /  \       Contract Tests
   /----\      Integration Tests
  /------\     Unit Tests (many)

トラブルシューティング

問題解決策
コンテナの起動が遅いコンテナを再利用する
ポートの競合ランダムポートを使用する
不安定なテスト待機戦略を使用する

使用方法

Skill("java-testing-advanced")

コメント