Ho una sottoclasse XCTestCase
simile a questa. Ho rimosso setup()
e tearDown
metodi per brevità:L'uso di generici è valido nelle sottoclassi XCTestCase?
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
}
}
}
E la sua sottoclasse che sembra qualcosa di simile:
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()
}
}
}
In teoria, questo dovrebbe funzionare come previsto - il compilatore non lamentarsi nulla. Ma è solo che quando eseguo i test case, il metodo setup()
non viene nemmeno chiamato. Ma, dice che i test sono passati quando il metodo testName()
avrebbe dovuto fallire.
L'uso di generici è un problema? Posso facilmente pensare a molti approcci non generici, ma vorrei scrivere i miei casi di test in questo modo. L'interoperabilità dell'XCTest tra Objective-C e Swift è il problema qui?
Penso che tu abbia risposto alla tua stessa domanda: setUp e test non vengono invocati. La tua idea sembra utile. Forse potresti provare a implementare una richiesta pull: https://github.com/apple/swift-corelibs-xctest –
Perché non vengono richiamati, è la domanda. Nel frattempo, ho implementato un modo molto crudo per farlo. Mi fa ribollire il cuore – avismara
@avismara Qual è stata la tua soluzione? Sto usando Swift 4 e non riesco ancora a eseguire test quando utilizzo una sottoclasse generica – Kdawgwilk