Ich habe eine XCTestCase
Unterklasse, die in etwa so aussieht. Ich habe setup()
und tearDown
Methoden der Kürze entfernt:Ist die Verwendung von Generics in XCTestCase-Unterklassen gültig?
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
}
}
}
Und seine Unterklasse, die etwa wie folgt aussieht:
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()
}
}
}
Theoretisch sollte dies wie erwartet - der Compiler nicht über beschwert etwas. Aber wenn ich die Testfälle durchführe, wird die Methode setup()
nicht einmal aufgerufen. Aber es sagt, dass die Tests bestanden haben, als klar testName()
Methode fehlschlagen sollte.
Ist die Verwendung von Generika ein Problem? Ich kann mir leicht viele nicht-generische Ansätze vorstellen, aber ich würde meine Testfälle gerne so schreiben. Ist die Interoperabilität des XCTest zwischen Objective-C und Swift hier das Problem?
Ich denke, Sie haben Ihre eigene Frage beantwortet: Setup und Test werden nicht aufgerufen. Deine Idee sieht nützlich aus. Vielleicht könnten Sie versuchen, eine Pull-Anfrage zu implementieren: https://github.com/apple/swift-corelibs-xctest –
Warum werden sie nicht aufgerufen, ist die Frage. In der Zwischenzeit habe ich eine sehr grobe Art und Weise, dies zu tun implementiert. Bringt mein Herz zum Wackeln. – avismara
@avismara Was war Ihre Lösung? Ich verwende Swift 4 und kann immer noch keine Tests ausführen, wenn ich eine generische Unterklasse verwende. – Kdawgwilk