2015-09-10 10 views
5

W moim niestandardowej klasy WLNetworkClient miałem do wykonania takiej metody:Jak przetestować wymagany init (koder :)?

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

I nie trzeba używać, ale chciałbym, aby to sprawdzić, aby 100% pokrycia kodu. Czy wiesz, jak to osiągnąć?

Próbowałem następujący sposób bez powodzenia:

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

Odpowiedz

1

Here jest odpowiedź, która powinna pomóc:

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

Unfortunalety itl nie działa: '*** - [NSKeyedUnarchiver initForReadingWithData:]: dane są puste; zapomniałeś wysłać -finishEncoding do NSKeyedArchiver? ' –

+0

To zadziałało dla mnie z UIButtonem – Jeremiah

3

kod Produkcja:

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

Brzmi nieźle;) Próbuję to jutro i ket wiesz ... –

+0

@ BartłomiejSemańczyk Czy to działało? –

+0

To nie działa dla mnie w nieco innej sytuacji. Nazywam super.init (coder: aDecoder) jako drugą linię i przestaje działać na tej linii. Żadna awaria nie kończy testu. – Jeremiah