You need to enable JavaScript to run this app. 如何使用Mockito测试Android代码中myFunc的catch代码块覆盖率
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Mockito测试Android代码中myFunc的catch代码块覆盖率

Android单元测试触发myFunc catch分支的方案

核心思路是通过Mock框架模拟otherObject.func()抛出异常的场景,Android单元测试常用Mockito框架实现,具体操作如下:

  • 首先确保otherObject可被Mock替换
    不要在业务类内部硬编码创建otherObject实例,改为通过构造方法、Setter方法或者依赖注入框架(如Hilt)从外部传入,只有这样测试时才能传入Mock的实例替换真实对象。
  • 配置Mock对象的异常抛出逻辑
    使用Mockito Mock出OtherObject类的实例,配置其func方法被调用时主动抛出异常,单元测试示例代码如下:
import org.junit.Test;
import org.mockito.Mockito;
import java.util.HashMap;

// 假设你的业务类名为BusinessClass
public class BusinessClassTest {
    // Mock得到OtherObject的模拟实例
    private final OtherObject mockOtherObject = Mockito.mock(OtherObject.class);
    // 把Mock实例传入业务类,这里假设BusinessClass构造方法支持传入OtherObject
    private final BusinessClass businessClass = new BusinessClass(mockOtherObject);

    @Test
    public void testMyFuncCatchBranch() {
        // 配置规则:调用mockOtherObject的func方法时抛出异常
        Mockito.doThrow(new RuntimeException("test for catch branch"))
                .when(mockOtherObject).func(Mockito.any(HashMap.class));

        // 执行待测试的myFunc方法
        businessClass.myFunc();

        // 验证catch分支逻辑执行:如果anotherFunc是其他Mock依赖,可直接验证调用
        // Mockito.verify(mockAnother).anotherFunc();
        // 也可以配合Robolectric验证Log输出是否符合预期
    }
}
  • 验证覆盖结果
    运行测试后,配合Jacoco等覆盖率工具可以看到catch分支已被覆盖,也可以通过断言、Mock调用验证等方式确认catch块内的Log打印、anotherFunc()调用等逻辑符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 08:15:03