关于 junit
用于编写 Java 和 Kotlin 单元测试的技能,涵盖 JUnit 4 和 JUnit 5。内容包括测试生命周期、断言、参数化测试、模拟依赖及 Maven 或 Gradle 测试执行。
主要功能
- 01编写 JUnit 4 和 JUnit 5 测试
- 02使用生命周期注解和断言
- 03编写参数化测试
- 04用 Mockito 模拟依赖
- 05通过 Maven 和 Gradle 执行测试
适用场景
- 01创建 Java 或 Kotlin 单元测试
- 02围绕初始化和清理组织测试
- 03针对多种输入执行测试
- 04通过模拟依赖隔离被测单元
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ partme-ai/ full-stack-skills --skill junit安装后在 Claude Code 中输入/junit确认已加载。
附带文件LICENSE.txt
详细介绍
适用场景
当用户希望执行以下操作时,请使用此技能:
- 使用 JUnit 4 或 JUnit 5(Jupiter)编写 Java 或 Kotlin 单元测试
- 使用注解(@Test、@BeforeEach、@AfterEach、@ParameterizedTest)
- 使用断言(assertEquals、assertThrows、assertAll)
- 集成 Mockito 或 AssertJ,以进行模拟和流畅断言
- 使用 Maven Surefire 或 Gradle 配置测试执行
如何使用此技能
工作流
- 编写带有
@Test注解的测试类和方法 - 使用生命周期注解设置和清理测试状态
- 使用断言验证预期行为
- 使用 Mockito 模拟依赖项,以隔离单元测试
1. JUnit 5 基本测试
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class CalculatorTest {
@Test
void shouldAddTwoNumbers() {
Calculator calc = new Calculator();
assertEquals(5, calc.add(2, 3));
}
@Test
void shouldThrowOnDivideByZero() {
Calculator calc = new Calculator();
assertThrows(ArithmeticException.class, () -> calc.divide(1, 0));
}
}
2. 生命周期注解
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.AfterEach;
class UserServiceTest {
private UserService userService;
@BeforeEach
void setUp() {
userService = new UserService(new InMemoryUserRepository());
}
@AfterEach
void tearDown() {
// Clean up resources
}
}
3. 参数化测试
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
class StringTest {
@ParameterizedTest
@CsvSource({"hello,5", "'',0", "junit,5"})
void shouldReturnCorrectLength(String input, int expected) {
assertEquals(expected, input.length());
}
}
4. 使用 Mockito 进行模拟
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
class OrderServiceTest {
@Mock private OrderRepository orderRepository;
@InjectMocks private OrderService orderService;
@Test
void shouldSaveOrder() {
Order order = new Order("item-1", 2);
orderService.placeOrder(order);
verify(orderRepository).save(order);
}
}
5. 运行测试
# Maven
mvn test
# Gradle
gradle test
# With coverage (JaCoCo)
mvn test jacoco:report
最佳实践
- 保持测试独立且可重复;避免依赖执行顺序或外部服务
- 使用 Mockito 将被测单元与其依赖项隔离
- 使用描述性名称命名测试(例如,
shouldReturnEmptyListWhenNoUsersExist) - 平衡测试覆盖率与速度;在 CI 中运行完整测试套件
- 使用
@Nested类对相关测试用例进行分组
资源
- JUnit 5 用户指南:https://junit.org/junit5/docs/current/user-guide/
- Mockito:https://site.mockito.org/
- AssertJ:https://assertj.github.io/doc/
关键词
junit、JUnit 5、JUnit Jupiter、单元测试、Java、Kotlin、断言、Mockito、参数化测试、BeforeEach、AfterEach、测试生命周期
评论
支持 Markdown