Kotlin使用Mockk库全部分支覆盖方法及12个分支来源咨询
Kotlin + Mockk 测试分支覆盖问题解答
12个分支对应逻辑拆解
结合你提到的两个测试对象(String类型id、List类型name),统计到的12个分支通常是Kotlin代码中常见的判空、合法性校验、集合操作的分支点,对应逻辑如下:
- String类型id的4个分支:
- id为
null - id为空字符串
"" - id为仅含空格/制表符等的空白字符串
- id为非空、非空白的有效字符串
- id为
- List类型name的8个分支:
- name整体为
null - name是空集合(长度为0)
- name仅包含1个
null元素 - name仅包含1个空字符串元素
- name仅包含1个空白字符串元素
- name包含多个元素,且存在
null/空字符串/空白字符串元素 - name所有元素均为非空、非空白的有效字符串
- name包含重复的有效字符串元素
- name整体为
全部分支覆盖实现方案
按照以下步骤操作即可逐步实现全部分支覆盖:
- 先梳理待测试方法的所有判断逻辑,把每一处if/else、安全调用
?.、Elvis运算符?:、集合判空操作的true/false分支都单独列出来,避免遗漏 - 针对id的每一种分支场景,单独构造测试入参,结合Mockk的
every { }语法桩化对应依赖方法的返回值,执行测试验证 - 针对name的每一种分支场景,单独构造对应的集合入参,覆盖所有集合边界情况
- 若你的业务逻辑中存在id和name的组合判断(例如仅当id有效且name不为空时才执行某段逻辑),需要补充两个字段不同状态组合的测试用例
- 每次补充测试用例后重新运行覆盖率统计,根据未标色的代码行定位未覆盖的分支,针对性补充用例即可
内容的提问来源于stack exchange,提问作者Compose Learner
相关产品推荐
相关产品推荐

