Итак, это немного неловко о Swift, поскольку я пытаюсь достичь 100% -ного охвата кода в своих тестах, но Swift требует строки кода, которая никогда не будет достигнута по дизайну.Swift Switch Случай по умолчанию, который никогда не будет выполнен.
Код обижая:
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), но нет никакого способа, чтобы написать тест против случая по умолчанию.
Что лучше всего делать в этом случае, чтобы получить полное тестовое покрытие?
Мне любопытно, как много обходных способов игры, которые вы захотите реализовать в погоне за 100% -ным охватом для тестирования, прежде чем вы согласитесь с тем, как счетчик результативности – Alexander
Было высказано предположение о 'switch!' Заявлении, которое имеет * implicit * 'default: fatalError()', см. https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20161003/027563.html. Насколько я понимаю, это вообще не одобрялось. –
Рассматривая пример выше, вы сопоставляете целое число в диапазоне '0 .. <7' с вычислением (или даже исправлением-возвратом?) На основе значения целого числа в' 0 .. <7'. В случае, если это не просто пример, чтобы охватить вопрос о недоступном коде, вы можете захотеть реорганизовать эту функцию в нечто более кратким, но все еще имеет одно и то же семантическое значение. (Как рассчитывается «подходящее целое число»: s?) – dfri