mcpField
J
java-testing-advanced

java-testing-advanced

github.com/pluginagentmarketplace测试与质量41329 次安装42 周前更新
代码仓库

关于 java-testing-advanced

java-testing-advanced 是面向 Java 开发者的测试技能,介绍提升测试覆盖面的进阶方法,涵盖集成、契约、变异和基于属性的测试。

主要功能

  1. 01使用 Testcontainers 进行集成测试
  2. 02使用 Pact 进行契约测试
  3. 03使用 PIT 进行变异测试
  4. 04生成基于属性的测试

适用场景

  1. 01针对真实数据库进行测试
  2. 02验证 API 契约
  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")

评论

支持 Markdown