当前位置:首页 > 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 注解标记。

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 验证方法是否抛出预期异常:

java 如何写测试类

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

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

相关文章

jest如何测试react

jest如何测试react

使用 Jest 测试 React 组件 Jest 是 Facebook 推出的 JavaScript 测试框架,特别适合测试 React 应用。以下介绍如何使用 Jest 测试 React 组件。…

如何写react 组件

如何写react 组件

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

React如何写popover

React如何写popover

使用React创建Popover React中实现Popover可以通过多种方式,包括使用第三方库或自定义组件。以下是几种常见方法: 使用Material-UI库 Material-UI提供了现成的…

react native 如何写组件

react native 如何写组件

React Native 组件开发指南 React Native 组件开发主要分为两种类型:函数组件和类组件。以下分别介绍两种组件的写法及核心概念。 函数组件写法 函数组件是 React Nativ…

react h5网站如何真机测试

react h5网站如何真机测试

使用 Chrome 远程调试(Android) 确保手机和电脑在同一局域网,打开手机开发者选项中的 USB 调试 和 USB 安装。通过 USB 连接电脑,在 Chrome 浏览器地址栏输入 chro…

java如何写接口

java如何写接口

Java 接口的基本语法 在 Java 中,接口通过 interface 关键字定义。接口可以包含抽象方法、默认方法、静态方法和常量。以下是接口的基本语法: public interface M…