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

使用Mockito的测试用例未返回预期字符串,listCats方法问题排查

问题根因分析

1. 初始版本返回空字符串

你未对Mock的Cat对象的getRented()方法做打桩配置:

  • 若getRented()返回的是Boolean包装类型,Mockito对未打桩的引用类型方法默认返回null,此时执行c.getRented() == false判断时条件不成立,不会进入拼接逻辑,最终返回空字符串。
  • 若getRented()返回的是基本类型boolean,Mockito默认返回false,此时需要额外排查addCat方法是否正常、cats集合是否成功存入了传入的c1/c2/c3对象。

2. 修改后仅返回单只猫信息

你把return retBuild.toString();语句写在了for循环的if分支内部,第一次匹配到符合条件的Cat对象并完成拼接后,方法就会直接返回结果,循环终止,只能拿到第一条匹配的猫的信息。

3. 返回值为Mock for Cat, hashCode: 10523xyz

你调用c.toString()拼接字符串,但未对Mock的Cat对象的toString()方法打桩,Mockito生成的Mock对象默认的toString()实现只会输出类名和哈希值,不会自动生成你期望的ID x. 名字格式内容。


修复方案

  1. 给所有Mock的Cat对象补充getRented()方法打桩,示例:
Mockito.when(c1.getRented()).thenReturn(false);
Mockito.when(c2.getRented()).thenReturn(false);
  1. 将return语句移到for循环外部,等所有符合条件的猫都拼接完成后再返回结果。
  2. 调整拼接逻辑,直接使用已经打桩的getId()和getName()方法拼接,无需依赖toString():
public String listCats() {
    StringBuilder retBuild = new StringBuilder();
    for(Cat c : cats) {
        if(Boolean.FALSE.equals(c.getRented())) { // 该写法可避免包装类空指针
            retBuild.append("ID ").append(c.getId()).append(". ").append(c.getName());
            retBuild.append("\n");
        }
    }
    // 可根据需求trim掉末尾多余的换行
    return retBuild.toString().trim();
}
  1. 修正测试断言里的多余转义引号,你当前写的期望字符串末尾多了一个\",会导致断言匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:24:04