gpt4 book ai didi

ios - 在 XCTestCase 子类中使用泛型是否有效?

转载 作者:IT王子 更新时间:2023-10-29 05:23:48 24 4
gpt4 key购买 nike

我有一个看起来像这样的 XCTestCase 子类。为简洁起见,我删除了 setup()tearDown 方法:

class ViewControllerTests <T : UIViewController>: XCTestCase {
var viewController : T!

final func loadControllerWithNibName(string:String) {
viewController = T(nibName: string, bundle: NSBundle(forClass: ViewControllerTests.self))
if #available(iOS 9.0, *) {
viewController.loadViewIfNeeded()
} else {
viewController.view.alpha = 1
}
}
}

它的子类看起来像这样:

class WelcomeViewControllerTests : ViewControllerTests<WelcomeViewController> {
override func setUp() {
super.setUp()
self.loadControllerWithNibName("welcomeViewController")
// Put setup code here. This method is called before the invocation of each test method in the class.
}

func testName() {
let value = self.viewController.firstNameTextField.text
if value == "" {
XCTFail()
}
}
}

理论上,这应该按预期工作——编译器不会提示任何事情。但只是当我运行测试用例时,setup() 方法甚至没有被调用。但是,当 testName() 方法显然应该失败时,它表示测试已经通过。

泛型的使用有问题吗?我可以很容易地想到许多非泛型方法,但我非常想像这样编写我的测试用例。 XCTest 在 Objective-C 和 Swift 之间的互操作性是这里的问题吗?

最佳答案

XCTestCase使用Objective-C运行时加载测试类,查找测试方法等。

Swift 泛型类与 Objective-C 不兼容。参见 https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4-ID53 :

When you create a Swift class that descends from an Objective-C class, the class and its members—properties, methods, subscripts, and initializers—that are compatible with Objective-C are automatically available from Objective-C. This excludes Swift-only features, such as those listed here:

  • Generics

...

因此您的通用 XCTestCase 子类不能被 XCTest 使用。

关于ios - 在 XCTestCase 子类中使用泛型是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35273597/

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