当前位置:首页 > 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
分享给朋友:

相关文章

react如何写跳转

react如何写跳转

使用 React Router 进行页面跳转 React 应用中通常使用 react-router-dom 库实现页面跳转。以下是几种常见的跳转方式: 安装依赖包 npm install reac…

react中table判断如何写

react中table判断如何写

判断表格数据为空 在React中判断表格数据是否为空,可以通过检查数据数组的长度来实现。当数据为空时显示提示信息或占位符。 {data.length === 0 ? ( <div>暂…

react中如何写图片路径

react中如何写图片路径

在React中正确编写图片路径需要根据图片存放位置和项目配置选择合适的方式。以下是几种常见方法: 使用相对路径或绝对路径 将图片放在public文件夹下时,可以直接通过相对路径或绝对路径引用。例如图…

如何写react项目多个页面

如何写react项目多个页面

创建多页面React项目的方法 使用React Router管理多页面是常见方案。React Router是React官方推荐的库,用于处理单页应用(SPA)中的路由和页面导航。 安装React R…

如何写react项目脚手架

如何写react项目脚手架

创建React项目脚手架 使用官方工具create-react-app是最快捷的方式。确保已安装Node.js(>=14.0.0)和npm(>=5.6),运行以下命令生成基础项目结构:…

Java如何换行

Java如何换行

在Java中换行的几种方法 在Java中,换行可以通过多种方式实现,具体取决于使用场景和需求。以下是几种常见的换行方法: 使用\n转义字符 \n是换行符的转义字符,可以在字符串中直接使用: Sy…