Sto provando a utilizzare unit test in swift per testare il comportamento dell'applicazione reale. Quando provo a trasmettere il numero UIApplicationDelegate
al mio AppDelegate
dalla mia funzione di test, ho ricevuto un'eccezione EXC_BAD_ACCESS. Sotto il codice di prova:UIApplication.sharedApplication(). Delegate come AppDelegate causa EXC_BAD_ACCESS che lo utilizza sul test rapido dell'unità
func testGetAppDelegate(){
let someDelegate = UIApplication.sharedApplication().delegate
let appDelegate = someDelegate as AppDelegate //EXC_BAD_ACCESS here
XCTAssertNotNil(appDelegate, "failed to get cast pointer")
}
AppDelegate la classe è impostata su pubblico, quindi non è un problema dal livello di accesso.
Utilizzando l'obiettivo-c nello stesso target di prova funziona. Sotto le semplici istruzioni:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
Il debugger dice che SomeDelegate è un Builtin.RawPointer. Non so di cosa si tratta, non ho familiarità con i dettagli di basso livello.
Hai indovinato, molte grazie. Devo ancora digerire queste informazioni per scoprire quale sia l'approccio giusto per i test, alcuni post suggeriscono di fare come stavo facendo, ma il modo in cui stavo facendo era il problema. – ByteArtisan
Alcune classi indipendenti, ad esempio 'DateUtility', possono essere aggiunte direttamente al target dei test. Ma le classi legate all'applicazione principale, come ad esempio 'AppDelegate' o CoreData related, non possono essere testabili senza importarle dal modulo dell'applicazione principale. Per così dire, per i "test unitari", l'aggiunta diretta è OK. Ma per i "test delle applicazioni", importali. – rintaro
Sto cercando di implementare quello che hai detto qui, ma ho ancora problemi. Il mio codice si trova all'indirizzo: http: // stackoverflow.it/questions/28042105/swift-dynamic-cast-failed-swift-dynamiccastclassunconditional –