所以,这是关于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)提供一个大小写,但是没有办法针对默认情况编写测试。
在这种情况下,为了获得完整的单元测试覆盖率,最好的做法是什么?
答案 0 :(得分:2)
这是我能想到的最佳解决方案:
func calculateWorkingOffset(_ offset: Int) -> Int {
switch Offset(rawValue: abs(offset) % 7)! {
case .zero:
return [appropriate_integer]
case .one:
return [appropriate_integer]
case .two:
return [appropriate_integer]
case .three:
return [appropriate_integer]
case .four:
return [appropriate_integer]
case .five:
return [appropriate_integer]
case .six:
return [appropriate_integer]
}
}
// Please name this enum and its values appropriately. I called it
// Offset because I have no context of what you're doing
enum Offset: Int {
case zero
case one
case two
case three
case four
case five
case six
}
虽然这解决了100%的测试覆盖率问题。它有很多缺点。如果要添加新案例.seven
,则必须在枚举和switch语句中添加新案例。