关于 java-testing-advanced
java-testing-advanced 是面向 Java 开发者的测试技能,介绍提升测试覆盖面的进阶方法,涵盖集成、契约、变异和基于属性的测试。
主要功能
- 01使用 Testcontainers 进行集成测试
- 02使用 Pact 进行契约测试
- 03使用 PIT 进行变异测试
- 04生成基于属性的测试
适用场景
- 01针对真实数据库进行测试
- 02验证 API 契约
- 03发现测试套件中的缺口
- 04自动生成测试用例
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pluginagentmarketplace/ custom-plugin-java --skill java-testing-advanced安装后在 Claude Code 中输入/java-testing-advanced确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/config.yamlschema.jsontesting-patterns.yamlreferences/GUIDE.mdPATTERNS.mdscripts/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