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

如何使用Assertions或Mocks为该Java方法编写单元测试?

你的Java代码单元测试验证方案

核心测试场景拆解

你的代码分两个关键分支,单元测试必须覆盖这两个场景,才能确保逻辑正确:

  • 分支一:cantidad = 0(也就是mapsCodigoError里的HashMap是空的)
  • 分支二:cantidad ≠ 0(HashMap有数据,触发遍历、转换、排序、添加元素的完整逻辑)

具体测试实现步骤

1. 准备测试工具

通常用JUnit 5 + Mockito来做这类测试,先在测试类里mock好依赖对象:

  • Mock mapsCodigoError,控制它返回的HashMap内容
  • 如果recuperarError是外部方法或需要验证调用,也可以mock它的返回值

2. 测试分支一:空HashMap场景

测试目标:当HashMap为空时,listaValoresEstatus保持初始状态(比如空列表)

@Test
void testWhenHashMapIsEmpty() {
    // 1. 设置mock:让mapsCodigoError返回空HashMap
    when(mapsCodigoError.getHaspMapCodigos()).thenReturn(new HashMap<>());
    
    // 2. 调用你要测试的方法(假设这段代码在processCodigos()里)
    yourClassInstance.processCodigos();
    
    // 3. 验证结果:listaValoresEstatus应该是空的
    assertTrue(listaValoresEstatus.isEmpty());
}

3. 测试分支二:非空HashMap场景

这个分支要验证多个关键环节:recuperarError的调用、列表排序、元素正确添加到listaValoresEstatus

3.1 先造测试数据

// 构造测试用的Totalcodigo对象
Totalcodigo errorCode1 = new Totalcodigo("ERROR_TYPE_1");
Totalcodigo errorCode2 = new Totalcodigo("ERROR_TYPE_2");

// 构造带数据的HashMap
HashMap<Totalcodigo, Integer> testHashMap = new HashMap<>();
testHashMap.put(errorCode1, 5);
testHashMap.put(errorCode2, 3);

// 模拟recuperarError的返回结果:注意顺序要和排序后的预期一致(假设按数值升序排)
ValorCodigoOrdenado sortedValor1 = new ValorCodigoOrdenado(errorCode2, 3);
ValorCodigoOrdenado sortedValor2 = new ValorCodigoOrdenado(errorCode1, 5);
List<ValorCodigoOrdenado> mockRecuperarResult = Arrays.asList(sortedValor1, sortedValor2);

3.2 编写测试用例

@Test
void testWhenHashMapHasData() {
    // 1. 设置mock
    when(mapsCodigoError.getHaspMapCodigos()).thenReturn(testHashMap);
    when(yourClassInstance.recuperarError(any(Iterator.class), any(List.class))).thenReturn(mockRecuperarResult);
    
    // 2. 调用测试方法
    yourClassInstance.processCodigos();
    
    // 3. 验证关键逻辑
    // 确认recuperarError被调用了一次
    verify(yourClassInstance, times(1)).recuperarError(any(Iterator.class), any(List.class));
    
    // 验证listaValoresEstatus的元素数量正确
    assertEquals(2, listaValoresEstatus.size());
    
    // 验证元素是排序后的结果(这里按数值升序,所以第一个是3,第二个是5)
    assertEquals(sortedValor1, listaValoresEstatus.get(0));
    assertEquals(sortedValor2, listaValoresEstatus.get(1));
}

4. 修正你当前的校验方式

你用assertNotNull(cantidad)没意义,因为size()返回的是int类型,永远不会为null。直接校验数值就行:

// 分支一的校验
assertEquals(0, yourClassInstance.getCantidad());
// 分支二的校验
assertEquals(2, yourClassInstance.getCantidad());

内容的提问来源于stack exchange,提问作者Luis García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:53:12