当前位置:首页 > 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 Router 进行页面跳转 React 应用中通常使用 react-router-dom 库实现页面跳转。以下是几种常见的跳转方式: 安装依赖包 npm install reac…

React如何写popover

React如何写popover

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

React如何写自动回复效果

React如何写自动回复效果

React实现自动回复效果的方法 使用React实现自动回复效果可以通过状态管理、定时器和事件处理结合完成。以下是具体实现方式: 设置组件状态 初始化消息列表和输入框状态: const [mess…

react模拟受控组件如何写

react模拟受控组件如何写

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

react中action中如何写跳转

react中action中如何写跳转

在 React 中实现跳转的方法 使用 react-router-dom 的 useNavigate Hook 在函数组件中,可以通过 useNavigate Hook 实现编程式导航。在 actio…

react项目如何做单元测试

react项目如何做单元测试

安装测试工具 在React项目中,通常使用Jest作为测试框架,配合React Testing Library或Enzyme进行组件测试。确保项目中已安装相关依赖: npm install --…