ios - 带有 @available(iOS 9.0, *) 的方法在 8.x 上执行

标签 ios swift unit-testing

我写了单元测试。有些方法被标记为仅支持 iOS 9v。 但是一些标有 @available(iOS 9.0, *) 的方法会在装有 iOS 8.4.1 的设备上执行。当此方法执行时,单元测试执行崩溃。

为什么在标记为 iOS 9.x 时单元测试在 iOS 8.x 上执行 foo() 函数?

@available(iOS 9.0, *)
class func foo() {
    // Some code...
    if !TargetUtility.isRunningSimulator {
        // Crash happens when executed on iOS 8.4.1
        parameters[kSecAttrTokenID] = kSecAttrTokenIDSecureEnclave
    }
}

// In the test file:

@available(iOS 9.0, *)
func testFoo() {
    MyClass.foo()
}

最佳答案

测试框架可能不支持用于测试定义的@available。这可能是因为 XCUnit 是一个 Objective-C 框架,它本质上只是获取以 test...

开头的所有方法

@available 检查移动到运行时应该可以解决问题,例如:

guard #available(iOS 9.0, *) else {
   print("Test skipped")
   return
}

不幸的是,XCUnit 并不真正支持跳过测试。

关于ios - 带有 @available(iOS 9.0, *) 的方法在 8.x 上执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36592419/

相关文章:

ios - 如何处理 NSData 并返回 UIImage (Swift)

angularjs - 将数据传递到指令进行测试时的 Angular 指令单元测试问题

java - 如何选取部分测试用例组成BAT测试(构建验收测试)?

android - 使用 css 禁用移动滚动

ios - 在 ARKIT 中获取聚焦相机的所有 ARAnchors

ios - 直播应用 iOS

ios - 使用 Swift 访问 NSDictionary 中的数据

ios - 为大多数用户 IAP 获取 "Cannot connect to iTunes Store"

ios - 为当前录制的视频添加水印并带水印保存

android - 在 kotlin 中为 ViewModel 编写单元测试用例