Атрибут @available не работает с классами или методами XCTest - PullRequest
3 голосов
/ 08 января 2020

Я бы хотел, чтобы модульный тест выполнялся только для данной версии iOS или выше, но атрибут @available, похоже, совсем не работает с методами XCTest: - (

Например, Я вообще не могу отключить тест, используя любое изменение ключевого слова * 1004. * Тест всегда выполняется независимо от того, определен ли @available для класса или функции, использует unavailable или что-либо еще. Например ...

// Still runs on iOS
@available(iOS, unavailable)
class SomeTests: XCTestCase {
    func testSomething() {
        print("operatingSystemVersion=\(ProcessInfo.processInfo.operatingSystemVersion)")
        XCTFail()
    }
}
// Still runs on iOS
class SomeTests: XCTestCase {
    @available(iOS, unavailable)
    func testSomething() {
        print("operatingSystemVersion=\(ProcessInfo.processInfo.operatingSystemVersion)")
        XCTFail()
    }
}

Я могу достичь того, что хочу, с помощью приведенного ниже, но это не очень практично для большого количества тестов, подвержено ошибкам, определяется во время выполнения и методы тестирования по-прежнему выполняются и показывать как успех (что на самом деле не так).

class SomeTests: XCTestCase {
    func testSomething() {
        if #available(iOS 10.0, *) {
           print("operatingSystemVersion=\(ProcessInfo.processInfo.operatingSystemVersion)")
           XCTFail()
        }
    }
}

Я не думаю, что макрос препроцессора #if os(...) может помочь, потому что не может выполнить проверку версии.

Есть ли другой способ добиться того, чего я хочу? Я что-то не так делаю с @available (или, может быть, это просто ошибка)?

...