为什么需要单元测试
红-绿-重构循环
测试金字塔
Android测试分类
JUnit5配置
AssertJ/Hamcrest
参数化测试
生命周期·命名规范
Mock vs Spy
when-thenReturn
verify
ArgumentMatcher
Answer接口
静态方法Mock
构造方法Mock
Partial Mock
BDDMockito
陷阱与最佳实践
runBlockingTest
TestCoroutineDispatcher
TestScope
超时测试
Flow测试
LiveData测试规则
InstantTaskExecutorRule
ViewModel单元测试
StateFlow测试
内存数据库配置
DAO测试
Migration测试
Paging3测试
最佳实践
Fake vs Mock
网络+本地数据源
缓存策略测试
错误处理测试
纯业务逻辑测试
依赖注入测试
异常路径覆盖
边界条件测试
Espresso基础
onView/onData
RecyclerView测试
自定义Matcher
ComposeTestRule
semantics测试
状态驱动UI测试
动画测试
NavController测试
DeepLink测试
返回栈测试
导航图验证
Hilt测试配置
测试模块
@BindValue
@UninstallModules
自定义测试组件
OkHttp MockWebServer
Retrofit测试
拦截器测试
网络错误模拟
超时测试
临时文件系统
SharedPreferences测试
DataStore测试
加密存储测试
TestListenableWorker
WorkManagerTestInitHelper
约束条件测试
周期性任务测试
Receiver测试
Service测试
Intent验证
权限测试
Provider测试
CRUD操作验证
URI匹配测试
权限测试
基准测试库
方法耗时测试
内存泄漏检测
ANR检测
启动时间测试
JaCoCo配置
覆盖率报告解读
增量覆盖率
覆盖率门禁
覆盖率陷阱
安全重构步骤
测试保护网
提取方法/类
依赖倒置
设计模式与可测试性
Characterization测试
黄金Master测试
依赖解耦
测试缝
逐步改进策略
模块间依赖测试
公共测试模块
测试变体
模块化测试策略
GitHub Actions配置
Gradle测试任务
测试报告聚合
并行测试
Flaky测试处理
Espresso与Barista
Screenshot测试
多设备测试
云测试平台集成
Builder模式
ObjectMother
测试数据生成器
随机测试数据
边界值生成
脆弱的测试
慢测试
重复测试
测试与实现耦合
过度Mock
测试代码坏味道
登录模块TDD
购物车TDD
搜索功能TDD
推送通知TDD
团队测试规范
Code Review中的测试
测试金字塔落地
度量与改进
持续学习路径