当前位置:首页 > Java

java 如何写测试类

2026-03-03 20:47:05Java

编写 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 注解标记。

java 如何写测试类

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 提供注解控制测试生命周期:

java 如何写测试类

  • @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 测试类。

标签: 如何写测试
分享给朋友:

相关文章

如何写react 组件

如何写react 组件

创建 React 组件的基本方法 React 组件可以通过函数式组件或类组件两种方式创建。以下是具体实现方法: 函数式组件 函数式组件是当前推荐的方式,简洁且支持 Hooks。 impor…

react如何写列表

react如何写列表

在React中渲染列表的方法 使用map方法遍历数组生成列表元素 React中通常通过JavaScript的map方法将数组数据转换为React元素数组。每个列表项需要包含唯一的key属性以提高渲染性…

react插件如何写

react插件如何写

React 插件开发基础 React 插件通常以 npm 包形式发布,核心是通过封装可复用的组件或逻辑供其他项目调用。需要遵循 React 组件设计规范,并考虑兼容性、性能优化和文档完整性。 项目初…

react 如何写页面跳转

react 如何写页面跳转

页面跳转的实现方式 在React中实现页面跳转可以通过多种方式,以下是常见的几种方法: 使用React Router的<Link>组件 React Router是React生态中最常用的…

react如何写轮播图

react如何写轮播图

使用 React 实现轮播图 轮播图可以通过多种方式实现,以下是几种常见的方法,包括使用第三方库和纯手写实现。 使用第三方库(react-slick) react-slick 是一个流行的轮播图库,…

react中token如何写

react中token如何写

在React中处理Token的方法 使用localStorage或sessionStorage存储Token 将Token存储在浏览器的localStorage或sessionStorage中,便于跨…