To jest moja definicja metoda:Jak przetestować metodę, która zgłasza błąd w Swift 2?
func isValidForMode(mode: DBFindViewControllerMode) throws -> Bool { }
Teraz mogę to sprawdzić w prosty sposób, ponieważ wiem, że to NIE zgłasza błąd:
XCTAssertTrue(try! searchOptionsManager.isValidForMode(.Address))
Ale co, jeśli wiem, że rzuty metodami?
Najlepszym rozwiązaniem byłoby XCTAssertThrows()
, ale to nie jest :-)
Poniżej moja próba:
do {
try searchOptionsManager.isValidForMode(.Address)
} catch let error {
XCTAssertEqual(error as! DBErrorType, DBErrorType.CannotBeEmpty("Street"))
}
Ale to się nie powiedzie, ponieważ:
Cannot find an overload for
XCTAssertEqual
that accepts an argument list of type(DBErrorType, DBErrorType)
try nie rzuca wyjątkiem, ale błędem. catch nie obsługuje wyjątków, ale błędy. To nie są wyjątki. – robertvojta
Całkowicie się zgadzam, ale byłoby miło, gdyby Apple to przyznał! Jest zrozumiałe, że ludzie wpadają w zakłopotanie, gdy metody w Fundacji zawodzą z błędami, takimi jak 'failed: caught 'NSInvalidArgumentException" ', co brzmi jak złapało wyjątek do mnie. – Sam