我写了单元测试。有些方法被标记为仅支持 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/