当前位置:首页 > Java

java如何写单元测试

2026-02-05 10:37:30Java

使用JUnit框架编写单元测试

JUnit是Java最常用的单元测试框架,需在项目中引入依赖(Maven示例):

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.8.2</version>
    <scope>test</scope>
</dependency>

测试类需用@Test注解标记测试方法:

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

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

测试异常和超时

使用assertThrows验证异常,assertTimeout验证超时:

java如何写单元测试

@Test
public void testDivideByZero() {
    Calculator calc = new Calculator();
    assertThrows(ArithmeticException.class, () -> calc.divide(1, 0));
}

@Test
public void testTimeout() {
    assertTimeout(Duration.ofMillis(100), () -> Thread.sleep(50));
}

使用Mockito模拟依赖

当测试对象依赖外部服务时,可用Mockito创建模拟对象:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>4.5.1</version>
    <scope>test</scope>
</dependency>

示例模拟数据库调用:

java如何写单元测试

@Test
public void testUserService() {
    UserRepository mockRepo = Mockito.mock(UserRepository.class);
    Mockito.when(mockRepo.findById(1L)).thenReturn(new User(1L, "Alice"));

    UserService service = new UserService(mockRepo);
    assertEquals("Alice", service.getUserName(1L));
}

参数化测试

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

@ParameterizedTest
@ValueSource(ints = {1, 3, 5})
public void testIsOdd(int number) {
    assertTrue(number % 2 != 0);
}

测试生命周期注解

利用@BeforeEach@AfterEach设置测试前后操作:

@BeforeEach
public void setup() {
    // 初始化测试资源
}

@AfterEach
public void cleanup() {
    // 释放资源
}

测试覆盖率工具

结合JaCoCo生成覆盖率报告(Maven配置):

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.7</version>
    <executions>
        <execution>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
    </executions>
</plugin>

运行mvn test后,报告默认生成在target/site/jacoco/目录。

分享给朋友:

相关文章

react如何写列表

react如何写列表

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

react如何写input框

react如何写input框

基础Input框实现 在React中创建基础Input框,使用<input>标签并绑定状态管理。通过useState钩子存储输入值,onChange事件更新状态。 import Re…

react中table判断如何写

react中table判断如何写

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

如何写react项目多个页面

如何写react项目多个页面

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

react中如何写less的样式

react中如何写less的样式

在React中使用Less样式 在React项目中集成Less预处理器需要安装相关依赖并进行配置。以下是具体方法: 安装Less依赖 通过npm或yarn安装less和less-loader: n…

java如何写

java如何写

Java 基础语法 Java 是一种面向对象的编程语言,语法清晰且结构严谨。以下是 Java 的基本语法规则和示例: 类定义 Java 程序的基本单位是类,每个 Java 程序至少包含一个类。类名…