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

如何用Mockito编写JUnit测试覆盖删除操作的异常分支?

如何覆盖deleteByNoteCd方法的异常分支测试

要覆盖catch分支,核心是让userNoteDefRepository.deleteById(noteCd)抛出异常,触发try-catch的异常逻辑。按以下步骤调整你的JUnit测试:

1. 确保测试类的依赖Mock配置正确

首先,你的测试类需要正确MockuserNoteDefRepository和loggingService,并注入到待测试的service实例中:

@ExtendWith(MockitoExtension.class)
public class ClientRequestServiceTest {
    @Mock
    private UserNoteDefRepository userNoteDefRepository;
    
    @Mock
    private LoggingService loggingService;
    
    @InjectMocks
    private ClientRequestService service; // 你的待测试服务类
}

2. 编写异常分支的测试方法

新增一个专门测试异常场景的方法,通过Mockito强制让deleteById抛出异常:

@Test
public void deleteByNoteCd_WhenDeleteFails_ReturnsErrorResponse() {
    // 构造测试参数
    LogDTO log = new LogDTO();
    UserNoteDefination request = new UserNoteDefination();
    request.setTabName("UND_TABLE");
    request.setNoteCd("TEST7");

    // 配置Mock:让deleteById抛出异常
    doThrow(new RuntimeException("模拟删除失败")).when(userNoteDefRepository).deleteById("TEST7");

    // 调用待测试方法
    UserNoteDefination response = service.deleteByNoteCd(request, log);

    // 验证结果
    assertEquals("Error", response.getMsg());
    assertEquals("[FROM:UI] clientRequest:Error occured while delete", log.getPayload());
    
    // 验证日志服务是否按预期调用
    verify(loggingService).log(GuiServiceConstants.ERROR_LEVEL, log);
}

关键说明

  • doThrow用于配置Mock对象的方法抛出指定异常,这里针对deleteById("TEST7")触发异常,你也可以用anyString()匹配任意传入的noteCd。
  • 验证环节不仅要检查响应的msg是否为"Error",还要验证log的payload是否正确,以及loggingService是否以ERROR级别记录了日志,确保整个异常分支的逻辑都被执行。
  • 原测试只覆盖了正常流程,新增这个测试后就能覆盖catch分支的代码了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:35:26