gpt4 book ai didi

ios - @available 属性不适用于 XCTest 类或方法

转载 作者:行者123 更新时间:2023-12-01 15:28:40 25 4
gpt4 key购买 nike

我希望单元测试仅在给定版本的 iOS 或更高版本上运行,但 @available属性似乎根本不适用于 XCTest 方法:-(

例如,我根本无法使用 @available 的任何变体来禁用测试。关键词。无论 @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 上做错了吗? (或者这可能只是一个错误)?

最佳答案

我通过为仅 iOS13 的测试创建一个特殊的父类(super class)来解决这个问题:


class iOS13TestCase: XCTestCase {

override func invokeTest() {
if #available(iOS 13, *) {
return super.invokeTest()
} else {
print("Skipping test because it's iOS13+ only.")
return
}
}
}

然后我在我的测试中使用它而不是 XCTestCase 用于仅 iOS13 的测试:
@available(iOS 13, *)
class SwiftUITest: iOS13TestCase {
func test_something() { }
}

Xcode 仍然可以看到测试,但是,在低于 iOS13 的版本上会跳过它们的执行。
这可以通过绕过 XCTestCase.testInvocations 更好地解决。属性(property)。由于 NSInvocation在 Swift 中不可用,它需要在 Objective-C 中实现父类(super class),我不想这样做:)

关于ios - @available 属性不适用于 XCTest 类或方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59645536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com