chore: sync with upstream e7cb442 + update zh translations

This commit is contained in:
xuxiang
2026-02-02 18:57:56 +08:00
parent 6f87d43c19
commit d7cafbe582
66 changed files with 9395 additions and 1465 deletions

View File

@@ -1,26 +1,26 @@
---
name: springboot-tdd
description: Test-driven development for Spring Boot using JUnit 5, Mockito, MockMvc, Testcontainers, and JaCoCo. Use when adding features, fixing bugs, or refactoring.
description: 使用 JUnit 5MockitoMockMvcTestcontainers JaCoCo 进行 Spring Boot 的测试驱动开发TDD。在添加功能、修复 Bug 或进行重构时使用。
---
# Spring Boot TDD Workflow
# Spring Boot 测试驱动开发TDD工作流
TDD guidance for Spring Boot services with 80%+ coverage (unit + integration).
针对 Spring Boot 服务的 TDD 指南,要求 80% 以上的覆盖率(单元测试 + 集成测试)。
## When to Use
## 适用场景
- New features or endpoints
- Bug fixes or refactors
- Adding data access logic or security rules
- 开发新功能或端点Endpoints
- 修复 Bug 或进行代码重构
- 添加数据访问逻辑或安全规则
## Workflow
## 工作流
1) Write tests first (they should fail)
2) Implement minimal code to pass
3) Refactor with tests green
4) Enforce coverage (JaCoCo)
1) 先写测试(测试应当失败)
2) 实现最少量的代码以使测试通过
3) 在测试通过Green的前提下进行重构
4) 强制执行覆盖率检查(JaCoCo
## Unit Tests (JUnit 5 + Mockito)
## 单元测试(JUnit 5 + Mockito
```java
@ExtendWith(MockitoExtension.class)
@@ -41,12 +41,12 @@ class MarketServiceTest {
}
```
Patterns:
- Arrange-Act-Assert
- Avoid partial mocks; prefer explicit stubbing
- Use `@ParameterizedTest` for variants
模式:
- Arrange-Act-Assert(准备-执行-断言)
- 避免部分打桩Partial Mocks优先使用显式桩函数Stubbing
- 使用 `@ParameterizedTest` 处理多种变体场景
## Web Layer Tests (MockMvc)
## Web 层测试(MockMvc
```java
@WebMvcTest(MarketController.class)
@@ -65,7 +65,7 @@ class MarketControllerTest {
}
```
## Integration Tests (SpringBootTest)
## 集成测试(SpringBootTest
```java
@SpringBootTest
@@ -86,7 +86,7 @@ class MarketIntegrationTest {
}
```
## Persistence Tests (DataJpaTest)
## 持久层测试(DataJpaTest
```java
@DataJpaTest
@@ -109,12 +109,12 @@ class MarketRepositoryTest {
## Testcontainers
- Use reusable containers for Postgres/Redis to mirror production
- Wire via `@DynamicPropertySource` to inject JDBC URLs into Spring context
- 使用可重用的容器(如 Postgres/Redis来模拟生产环境
- 通过 `@DynamicPropertySource` 进行连接,将 JDBC URL 注入到 Spring 上下文中
## Coverage (JaCoCo)
## 覆盖率(JaCoCo
Maven snippet:
Maven 配置片段:
```xml
<plugin>
<groupId>org.jacoco</groupId>
@@ -133,13 +133,13 @@ Maven snippet:
</plugin>
```
## Assertions
## 断言(Assertions
- Prefer AssertJ (`assertThat`) for readability
- For JSON responses, use `jsonPath`
- For exceptions: `assertThatThrownBy(...)`
- 为了提高可读性,优先选择 AssertJ (`assertThat`)
- 对于 JSON 响应,使用 `jsonPath`
- 对于异常测试:`assertThatThrownBy(...)`
## Test Data Builders
## 测试数据构建器(Test Data Builders
```java
class MarketBuilder {
@@ -149,9 +149,9 @@ class MarketBuilder {
}
```
## CI Commands
## CI 命令
- Maven: `mvn -T 4 test` or `mvn verify`
- Gradle: `./gradlew test jacocoTestReport`
- Maven`mvn -T 4 test` `mvn verify`
- Gradle`./gradlew test jacocoTestReport`
**Remember**: Keep tests fast, isolated, and deterministic. Test behavior, not implementation details.
**记住**:保持测试快速、隔离且具有确定性。测试的是行为,而非实现细节。