You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JUnit和Mockito为void类型的delete方法编写单元测试

CarService delete 方法单元测试实现

我们基于 JUnit 5 + Mockito 编写单元测试,覆盖两个核心测试场景:

前置依赖

确认项目中已引入JUnit 5和Mockito相关依赖,Spring Boot项目可直接引入spring-boot-starter-test 启动器,已内置上述测试组件。

单元测试代码

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;

@ExtendWith(MockitoExtension.class)
public class CarServiceTest {

    // 模拟CarRepository依赖,不操作真实数据库
    @Mock
    private CarRepository carRepository;

    // 注入模拟依赖到待测试的CarService实例
    @InjectMocks
    private CarService carService;

    private static final Long TEST_CAR_ID = 1L;

    // 测试场景1:ID对应的Car存在
    @Test
    void delete_WhenCarExists_ShouldSetActionStatusToDeleteAndSave() {
        // 构造测试数据
        Car mockCar = new Car();
        when(carRepository.findById(TEST_CAR_ID)).thenReturn(Optional.of(mockCar));

        // 执行待测试方法
        carService.delete(TEST_CAR_ID);

        // 结果验证
        assertEquals("DELETE", mockCar.getActionStatus());
        verify(carRepository, times(1)).save(mockCar);
    }

    // 测试场景2:ID对应的Car不存在
    @Test
    void delete_WhenCarNotExists_ShouldThrowCustomException() {
        // 构造测试场景
        when(carRepository.findById(TEST_CAR_ID)).thenReturn(Optional.empty());

        // 执行并验证抛出指定异常
        CustomException exception = assertThrows(CustomException.class, () -> carService.delete(TEST_CAR_ID));
        assertEquals("custom message", exception.getMessage());

        // 验证save方法未被调用
        verify(carRepository, never()).save(any());
    }
}

说明

  • 两个测试用例完整覆盖delete方法的所有分支逻辑,代码覆盖度100%
  • 全程使用Mock对象模拟Repository交互,无真实数据库操作,测试执行速度快、无副作用
  • 所有验证逻辑完全匹配业务定义的规则

内容的提问来源于stack exchange,提问作者shubham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:48:05