所以,这是关于Swift的一点小问题,因为我正在尝试在我的测试中达到100%的代码覆盖率,但是Swift需要一行代码,这行代码将永远不会被执行 出于设计考虑。
有问题的代码:
func calculateWorkingOffset(_ offset: Int) -> Int {
let translatedOffset = abs(offset) % 7
switch translatedOffset {
case 0:
return [appropriate_integer]
case 1:
return [appropriate_integer]
case 2:
return [appropriate_integer]
case 3:
return [appropriate_integer]
case 4:
return [appropriate_integer]
case 5:
return [appropriate_integer]
case 6:
return [appropriate_integer]
default:
fatalError("Should never be executed")
}
}
默认情况必须存在,因为Swift编译器要求针对类型(在这种情况下是Int)的每个潜在值都有一个case,但是无法针对默认情况编写测试。
在这种情况下,如何获得完整的单元测试覆盖率?
switch!
语句的建议,其中包含一个 隐式 的default: fatalError()
,请参见 https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20161003/027563.html。据我所知,这个建议并没有得到普遍认可。 - Martin R0..<7
范围内的整数映射到基于该整数在0..<7
中的值计算(甚至是固定返回?)。如果这不仅是为了涵盖无法访问代码的问题而提供的示例,那么你可能希望将此函数重构为更简洁但仍具有相同语义价值的内容。(如何计算“适当的整数”?) - dfrib