做测试覆盖率要求,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