如何使用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
相关产品推荐
相关产品推荐

