下面的简单代码片段包含一个while
看起来好像是无限的 -loop:
def findDivisor(n: Int): Int = {
require(n >= 2)
var i = 2
while (true) {
if (n % i == 0) {
return i
} else {
// do-nothing branch
}
i += 1
}
// $COVERAGE-OFF$
throw new Error("unreachable")
// $COVERAGE-ON$
}
基本数学保证此方法总是终止(即使它找不到合适的除数,它也必须停止在n
)。
尽管在$COVERAGE-OFF$
-loop 之后while
,Scoverage(可能还有其他一些覆盖工具)会抱怨,并且只计算 75% 的分支覆盖率(因为while
算作一个分支点,并且false
之前从未采用过该分支return
)。
左右移动// $COVERAGE-OFF$
,例如在 -body 关闭之前}
也while
无济于事。
我如何强制它忽略不可能的分支?