当前位置:首页 > 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验证超时:

@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>

示例模拟数据库调用:

@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/目录。

java如何写单元测试

分享给朋友:

相关文章

react如何写列表

react如何写列表

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

如何写react项目

如何写react项目

创建React项目 使用Create React App(CRA)快速初始化项目,这是官方推荐的脚手架工具。运行以下命令生成项目结构: npx create-react-app my-app cd…

React如何写popover

React如何写popover

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

react插件如何写

react插件如何写

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

react 如何写页面跳转

react 如何写页面跳转

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

react native 如何写组件

react native 如何写组件

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