java test branch coverage and optional

161 阅读1分钟

做测试覆盖率要求,branch的经常不达标,查询了一些资料。在资料之外,倒也有了另外一些发现。

我们的一部分branch不达标的情况:

if(Objects.nonNull(obj) && obj.getXXX() != null) {
  obj.getXXX();
} else {
}

如上会触发4个branch,但是一般只会覆盖到2个(true && true, false)借用Optional可以优化这个问题。改为如下的代码表述:

Optional<T> optionalObj = Optional.ofNullable(obj).map(:method);
if (optionalObj.isPresent()) {
  optionalObj.get()
} else {
}

优化后可以得到如下的好处:

  • branch层面覆盖率提升
  • getXXX方法减少一次调用

其实Optional之前也都用过,但是没有太强制,也没有觉得和老想法有本质的差异。但是这次 branch覆盖率驱动的优化,竟然有了额外的收获,挺有趣。

references: is branch userful