2015-09-10 6 views
5

In meiner benutzerdefinierten Klasse WLNetworkClient Ich hatte ein solches Verfahren zu implementieren:So testen Sie erforderliche init (Coder :)?

required init(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

Ich brauche nicht, dass zu verwenden, aber ich möchte dies testen 100% Codeabdeckung zu machen. Weißt du wie du das erreichen kannst?

Ich habe versucht folgende Art und Weise ohne Erfolg:

let nc = WLNetworkClient(coder: NSCoder()) 
XCTAssertNotNil(nc) 

Antwort

1

Here ist die Antwort, die Sie sollten helfen:

let cd = NSKeyedUnarchiver(forReadingWithData: NSMutableData()) 
let c = CustomTextField(coder:cd) 
+0

Es ist leider nicht funktioniert: '*** - [NSKeyedUnarchiver initForReadingWithData:]: Daten ist leer; hast du vergessen zu senden -finishEncoding zum NSKeyedArchiver? ' –

+0

Das funktionierte für mich mit einem UIButton – Jeremiah

3

Produktionscode:

required init?(coder: NSCoder) { 
    return nil 
} 

Test:

func testInitWithCoder() { 
    let archiverData = NSMutableData() 
    let archiver = NSKeyedArchiver(forWritingWithMutableData: archiverData) 
    let someView = SomeView(coder: archiver) 
    XCTAssertNil(someView) 
} 
+0

Hört sich gut an;) Ich versuche es morgen und weißt du ... –

+0

@ BartłomiejSemańczyk Hat es funktioniert? –

+0

Das funktioniert bei mir nicht in einer etwas anderen Situation. Ich rufe super.init (coder: aDecoder) als zweite Zeile auf und hört auf, auf dieser Zeile zu laufen. Kein Absturz beendet den Test einfach. – Jeremiah