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

JUnit中Mockito不必要存根异常(UnnecessaryStubbingException)求助

解决Mockito UnnecessaryStubbingException异常

异常原因

UnnecessaryStubbingException 是因为你定义了存根(stub)方法,但测试代码中没有实际调用这些存根对应的方法。Mockito默认的严格模式会检查所有存根是否都被使用,未被调用的存根会被判定为冗余,触发这个异常。

你的测试代码存在两个核心问题:

  1. 没有调用被测试的目标方法 checkForValidFormIdForCoverageTest(),导致你存根的 getCarirSysID() 和 dsBean.getStateInfo() 都没有被触发。
  2. 可能存在多余存根:如果 dsBean.getStateInfo() 并不是 checkForValidFormIdForCoverageTest() 方法依赖的逻辑,这个存根本身就是冗余的。

解决方案

1. 调用被测试的目标方法

测试的核心是执行被测试方法,触发依赖的存根逻辑。在测试代码末尾添加对目标方法的调用:

@Test
public void checkForValidFormIdForCoverageTest() throws Exception{
    String caseId="caseId";
    StateVO stateVO = new StateVO(); 
    stateVO.setDeliveryState("AK");
    
    // 仅当被测试方法确实需要调用dsBean.getStateInfo时才保留这个存根
    Mockito.when(dsBean.getStateInfo(any())).thenReturn(stateVO);
    
    String carirSysID="CarirSysID";
    ApplicationCovrgeCommonRules applicationCovrgeCommonRulesMock= Mockito.spy(applicationCovrgeCommonRules);
    Mockito.doReturn(carirSysID).when(applicationCovrgeCommonRulesMock).getCarirSysID(caseId);
    
    // 执行被测试方法,触发存根调用
    applicationCovrgeCommonRulesMock.checkForValidFormIdForCoverageTest(caseId);
    
    // 可选:添加断言验证方法执行结果(根据方法返回值或副作用调整)
    // 例如如果方法返回布尔值:
    // boolean result = applicationCovrgeCommonRulesMock.checkForValidFormIdForCoverageTest(caseId);
    // Assertions.assertTrue(result);
}

2. 清理多余的存根

检查 dsBean.getStateInfo() 是否真的被 checkForValidFormIdForCoverageTest() 方法调用。如果没有,直接删除这个存根代码,避免冗余。

3. 临时启用宽松模式(不推荐)

如果确实需要保留未被调用的存根,可以通过以下方式关闭严格检查:

  • 在测试类上添加注解:
    @MockitoSettings(strictness = Strictness.LENIENT)
    public class YourTestClass {
        // 测试方法
    }
    
  • 针对单个存根使用宽松模式:
    Mockito.lenient().when(dsBean.getStateInfo(any())).thenReturn(stateVO);
    

注意:宽松模式会降低测试的严谨性,可能隐藏测试逻辑中的问题,仅作为临时方案使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:05:21