java 如何写测试类
编写 Java 测试类的基本方法
Java 测试类通常使用 JUnit 框架编写,JUnit 是 Java 生态中最流行的单元测试框架之一。以下是编写测试类的核心步骤和示例。
添加 JUnit 依赖
在 Maven 项目中,需在 pom.xml 中添加 JUnit 依赖:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
创建测试类结构
测试类需与被测类同名并以 Test 结尾(如 CalculatorTest)。类中的方法需用 @Test 注解标记。

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class CalculatorTest {
@Test
public void testAdd() {
Calculator calculator = new Calculator();
assertEquals(5, calculator.add(2, 3));
}
}
常用断言方法
JUnit 提供多种断言方法验证测试结果:
assertEquals(expected, actual):验证期望值与实际值相等。assertTrue(condition):验证条件为真。assertNull(object):验证对象为null。assertThrows(exceptionType, executable):验证是否抛出指定异常。
测试生命周期注解
JUnit 提供注解控制测试生命周期:

@BeforeEach:每个测试方法前执行。@AfterEach:每个测试方法后执行。@BeforeAll:所有测试方法前执行(静态方法)。@AfterAll:所有测试方法后执行(静态方法)。
import org.junit.jupiter.api.*;
public class LifecycleTest {
@BeforeAll
static void setupAll() {
System.out.println("Before all tests");
}
@BeforeEach
void setup() {
System.out.println("Before each test");
}
@Test
void test1() {
System.out.println("Test 1");
}
@AfterEach
void tearDown() {
System.out.println("After each test");
}
@AfterAll
static void tearDownAll() {
System.out.println("After all tests");
}
}
参数化测试
使用 @ParameterizedTest 和 @ValueSource 等注解实现多参数测试:
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
public class ParameterizedTestExample {
@ParameterizedTest
@ValueSource(ints = {1, 3, 5})
void testOddNumbers(int number) {
assertTrue(number % 2 != 0);
}
}
测试异常
使用 assertThrows 验证方法是否抛出预期异常:
@Test
void testDivideByZero() {
Calculator calculator = new Calculator();
assertThrows(ArithmeticException.class, () -> calculator.divide(1, 0));
}
测试类的最佳实践
- 单一职责:每个测试方法只验证一个功能点。
- 命名清晰:测试方法名应描述测试场景(如
testAdd_withNegativeNumbers)。 - 隔离性:测试之间不应依赖执行顺序。
- Mock 依赖:使用 Mockito 等工具模拟外部依赖。
// 使用 Mockito 模拟依赖
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Test;
public class UserServiceTest {
@Test
void testGetUser() {
UserRepository mockRepo = mock(UserRepository.class);
when(mockRepo.findById(1L)).thenReturn(new User(1L, "Alice"));
UserService service = new UserService(mockRepo);
User user = service.getUser(1L);
assertEquals("Alice", user.getName());
}
}
通过以上方法,可以高效编写结构清晰、覆盖全面的 Java 测试类。






