1. 为什么Android开发者必须掌握单元测试
刚入行那会儿,我最怕看到测试工程师发来的Bug清单。直到有一天,我的导师在代码评审时甩给我一份JUnit测试类:"把这些绿勾都跑通了再提PR"。那天起,我才明白单元测试不是QA的专属武器,而是开发者的第一道防线。
在Android开发中,单元测试指的是针对最小代码单元(通常是单个类或方法)的自动化验证。与手动点击测试相比,它具有三个不可替代的优势:
- 即时反馈:修改代码后30秒内就能验证逻辑正确性
- 成本控制:发现Bug的时间越早,修复成本越低(单元测试阶段发现的Bug修复成本仅为上线后的1/100)
- 设计优化:可测试的代码往往具有更好的架构设计
经验之谈:我见过太多"先写业务代码再补测试"最后变成"永远没时间写测试"的项目。建议采用TDD(测试驱动开发)方式,至少保证核心业务逻辑测试覆盖率不低于70%。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Android单元测试工具链全解析
2.1 JUnit:测试框架的基石
JUnit 4至今仍是Android单元测试的基础框架,其核心注解需要熟练掌握:
java复制@Test
public void calculateDiscount_shouldReturn90percent() {
// Given
Order order = new Order(1000, "VIP");
// When
double result = order.calculateDiscount();
// Then
assertEquals(900, result, 0.01);
}
关键技巧:
- 使用
@Before初始化测试环境 @After清理测试数据@Test(expected = Exception.class)验证异常- 参数化测试用
@ParameterizedTest
2.2 Mockito:依赖隔离神器
Android单元测试最大的挑战是系统依赖(如Context、Activity)。Mockito可以创建虚拟对象:
java复制@Test
public void loadUserProfile_shouldCallApi() {
// 创建Mock对象
UserApi mockApi = mock(UserApi.class);
UserRepository repo = new UserRepository(mockApi);
// 执行测试
repo.loadUserProfile("1001");
// 验证交互
verify(mockApi).getUser(eq("1001"));
}
注意:
- 不要过度Mock,否则测试将失去意义
- 对Android框架类,推荐使用Mockito-inline替代旧版Mockito
