---
name: java_test
description: 当需要为Java项目编写测试或配置测试框架时使用此规则——Java测试规则，Java项目测试框架使用规范。包括：选择合适的测试框架（JUnit、TestNG）；编写单元测试用例；编写集成测试和端到端测试；配置测试环境和依赖；使用Mockito和PowerMock进行模拟；测试Spring、SpringBoot等框架；编写参数化测试；测试覆盖率分析和报告；处理数据库和JPA测试；遵循Java测试最佳实践；组织测试目录结构；编写测试文档；使用Maven或Gradle运行测试。每当用户提及"Java测试"、"单元测试"、"集成测试"、"JUnit"、"TestNG"、"Mockito"、"测试框架"或需要Java项目测试、单元测试、集成测试时触发，无论项目规模和框架类型如何。如果需要为Java项目编写或配置测试，请使用此规则。
---

# Java 测试规则

## ⚠️ 你必须遵守的核心要求

**编写完成务必执行测试，直到修复完成为止！**

### 执行要求

- **必须**：每次代码修改后，立即运行测试
- **必须**：如果测试失败，修复代码直到所有测试通过
- **禁止**：提交未通过测试的代码
- **禁止**：在测试未通过的情况下继续开发

### 工作流程

1. 编写或修改代码
2. **立即**运行测试
3. 如果测试失败，修复代码
4. 重复步骤 2-3，直到所有测试通过
5. 确认所有测试通过后，才能提交代码

## 你必须使用的测试框架

### JUnit 5（推荐使用）

**Maven 运行命令：**

```bash
mvn test                  # 运行所有测试
mvn test -Dtest=TestClass # 运行特定测试类
```

**Gradle 运行命令：**

```bash
gradle test               # 运行所有测试
gradle test --tests TestClass # 运行特定测试类
```

### JUnit 4

**运行命令：**

```bash
mvn test                  # 运行所有测试
```

## 你必须编写的测试示例

### JUnit 5 测试格式

```java
// src/test/java/CalculatorTest.java
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class CalculatorTest {
    @Test
    void testAdd() {
        Calculator calc = new Calculator();
        assertEquals(5, calc.add(2, 3));
    }

    @Test
    void testDivideByZero() {
        Calculator calc = new Calculator();
        assertThrows(ArithmeticException.class, () -> {
            calc.divide(10, 0);
        });
    }
}
```

### JUnit 4 测试格式

```java
import org.junit.Test;
import static org.junit.Assert.*;

public class CalculatorTest {
    @Test
    public void testAdd() {
        Calculator calc = new Calculator();
        assertEquals(5, calc.add(2, 3));
    }
}
```

## 测试执行检查清单

在提交代码前，你必须确认：

- [ ] **编写完成后立即运行了测试**
- [ ] **所有测试都通过了**
- [ ] **如果测试失败，已修复代码直到通过**
- [ ] 测试覆盖了正常情况
- [ ] 测试覆盖了边界情况
- [ ] 测试覆盖了异常情况
- [ ] 使用 @BeforeEach/@AfterEach 进行设置和清理（如需要）
