Если у меня есть какая-то библиотека с такими методами, как:
public struct Foo {
@available(macOS 10.15, *)
func greatNewFeature() -> String {
return "new feature"
}
func legacyFeature() -> String {
return "legacy feature"
}
}
Тогда какой-то код, который ее использует:
func methodToTest() -> String {
let foo = Foo()
guard #available(macOS 10.15, *) else {
return foo.legacyFeature()
}
return foo.greatNewFeature()
}
Есть ли способ написать модульные тесты, которые дают мне полный набор охват methodToTest
?
Все идеи, которые у меня были до сих пор, не помогли:
- вы не можете рассматривать проверку доступности как внедренную функциональность - компилятор особенно нуждается ключевое слово
@available
для использования метода greatNewFeature
. - вы не можете добавить какой-нибудь хакерский логический код, который вы могли бы установить в тестах, например
#available(macOS 10.15, *) || isMacOS10_15
, по аналогичной причине с предыдущим пунктом.
Единственное, что я думаю, сработает, это запустить набор тестов несколько раз - один раз для каждой поддерживаемой версии ОС, а затем создать сценарий для объединения статистики покрытия кода. Кто-нибудь может придумать лучший подход?