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…
Ergo您的通用XCTestCase子类不能被XCTest使用.
总结以上是内存溢出为你收集整理的ios – 在XCTestCase子类中使用泛型有效吗?全部内容,希望文章能够帮你解决ios – 在XCTestCase子类中使用泛型有效吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)