当前位置:首页 > Java

Java 如何写 单测

2026-03-19 00:27:31Java

如何编写 Java 单元测试

Java 单元测试通常使用 JUnit 框架,结合 Mockito 等工具进行模拟对象测试。以下是具体实现方法。

添加依赖

在 Maven 项目中,需要在 pom.xml 中添加 JUnit 和 Mockito 依赖:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.8.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>4.5.1</version>
    <scope>test</scope>
</dependency>

创建测试类

测试类通常与被测类同名,后缀为 Test,放在 src/test/java 目录下。例如,对 Calculator 类测试:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

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

常用断言方法

JUnit 提供多种断言方法验证结果:

  • assertEquals(expected, actual):验证相等性。
  • assertTrue(condition):验证条件为真。
  • assertNull(object):验证对象为 null
  • assertThrows(exceptionType, executable):验证是否抛出异常。

使用 Mockito 模拟对象

对于依赖外部服务的类,可以用 Mockito 模拟依赖:

import org.junit.jupiter.api.Test;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;

public class OrderServiceTest {
    @Test
    public void testPlaceOrder() {
        PaymentService mockPayment = mock(PaymentService.class);
        when(mockPayment.process(anyDouble())).thenReturn(true);

        OrderService orderService = new OrderService(mockPayment);
        boolean result = orderService.placeOrder(100.0);

        assertTrue(result);
        verify(mockPayment).process(100.0);
    }
}

测试生命周期注解

JUnit 5 提供注解控制测试生命周期:

  • @BeforeEach:每个测试方法前执行。
  • @AfterEach:每个测试方法后执行。
  • @BeforeAll:所有测试方法前执行(静态方法)。
  • @AfterAll:所有测试方法后执行(静态方法)。

示例:

public class LifecycleTest {
    @BeforeAll
    static void setupAll() {
        System.out.println("初始化全局资源");
    }

    @BeforeEach
    void setup() {
        System.out.println("初始化测试资源");
    }

    @Test
    void test1() {
        System.out.println("执行测试1");
    }
}

参数化测试

通过 @ParameterizedTest 实现多组数据测试:

@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void testWithValueSource(int value) {
    assertTrue(value > 0);
}

测试私有方法

通过反射测试私有方法:

Java 如何写 单测

Method method = MyClass.class.getDeclaredMethod("privateMethod");
method.setAccessible(true);
Object result = method.invoke(myClassInstance);

集成测试与单元测试

单元测试应聚焦单一逻辑,避免依赖数据库或网络。集成测试需结合 Spring Boot Test 等框架,但不在单元测试范畴内。

标签: 如何写Java
分享给朋友:

相关文章

Java如何换行

Java如何换行

Java 字符串换行方法 在 Java 中实现字符串换行可以通过多种方式,具体取决于使用场景和需求。 使用转义字符 \n 是 Unix/Linux 系统中的换行符 \r\n 是 Windows 系…

react中token如何写

react中token如何写

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

react中如何写proxy

react中如何写proxy

在React中配置代理(Proxy)通常用于解决开发环境下的跨域问题,或转发API请求到后端服务器。以下是几种常见实现方式: 使用package.json配置 在React项目的package.js…

react中如何写原生js

react中如何写原生js

在 React 中编写原生 JavaScript 可以通过以下几种方式实现,具体取决于使用场景和需求: 直接操作 DOM React 推荐使用虚拟 DOM 进行更新,但在某些情况下需要直接操作真实…

react模拟受控组件如何写

react模拟受控组件如何写

模拟受控组件的实现方式 在React中,受控组件是指表单元素(如input、textarea、select)的值由React的state控制,并通过onChange事件更新state。以下是模拟受控组…

java如何写一个接口

java如何写一个接口

在Java中编写接口的基本语法 接口使用interface关键字定义,可以包含抽象方法、默认方法、静态方法和常量。以下是基础语法示例: public interface MyInterface {…