Ich versuche Unit-Test in Swift zu verwenden, um einige der realen Anwendung Verhalten zu testen. Wenn ich versuche, de UIApplicationDelegate
zu meinem AppDelegate
von meiner Testfunktion ich bekam und EXC_BAD_ACCESS Ausnahme. Unter dem Testcode:UIApplication.sharedApplication(). Delegate als AppDelegate verursacht EXC_BAD_ACCESS mit es auf schnelle Einheit Test
func testGetAppDelegate(){
let someDelegate = UIApplication.sharedApplication().delegate
let appDelegate = someDelegate as AppDelegate //EXC_BAD_ACCESS here
XCTAssertNotNil(appDelegate, "failed to get cast pointer")
}
AppDelegate Klasse ist öffentlich so eingestellt, dass es kein Problem von der Berechtigungsebene.
Mit objective-c im gleichen Testziel funktioniert es. Unterhalb der einfachen Anweisung:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
Der debuger sagt someDelegate ist ein Builtin.RawPointer. Ich weiß nicht, was das ist, ich bin nicht vertraut mit Low-Level-Details.
Sie haben richtig geraten, vielen Dank. Ich muss diese Informationen immer noch verdauen, um herauszufinden, was der richtige Ansatz zum Testen ist, einige Beiträge schlagen vor, das zu tun, was ich tat, aber das, was ich tat, war das Problem. – ByteArtisan
Einige unabhängige Klassen wie 'DateUtility' können direkt zum Testziel hinzugefügt werden. Aber die Klassen, die an die Hauptanwendung gebunden sind, wie beispielsweise AppDelegate oder CoreData, können nicht getestet werden, ohne sie vom Hauptanwendungsmodul zu importieren. Für die "Unit-Tests" ist das direkte Hinzufügen also OK. Aber für die "Anwendungstests", importieren Sie sie. – rintaro
Ich versuche zu implementieren, was Sie hier gesagt haben, aber ich habe immer noch Probleme. Mein Code befindet sich unter: http: // stackoverflow.com/questions/28042105/swift-dynamic-cast-gescheitert-swift-dynamiccastclassunconditional –