Как использовать XCTAssertThrowsSpecific
Я пишу модульные тесты Какао с использованием XCTest и недавно использовал XCTAssertThrows впервые. Это довольно круто, но я хочу сделать его еще лучше с XCTAssertThrowsSpecific и требует определенного исключения.
Вот пример теста:
-(void)testShortPassword {
XCTAssertThrows([user storePassword:@"abc"],@"Expect exception for short pw");
}
И на моем пользовательском классе у меня есть следующий код:
-(void)storePassword:(NSString*)password {
NSCAssert(password.length > 6, @"Password must be longer than 6 characters");
// go on to store the password on the keychain
}
Помня о том, что Какао в целом избегает использования исключений (поэтому может быть лучше возвратить ошибку и показать пользовательский интерфейс в предыдущем примере и т. Д.) Как вывести исключение способом, который может быть перехвачен XCTAssertThrowsSpecific
? Как мне указать это в XCTAssertThrowsSpecific(expression, specificException, format...)
?
1 ответ
Вы должны использовать исключения только для исключительных случаев, а не для обработки ошибок и управления потоком
Сказав это, вот как вы используете XCTAssertThrowsSpecific
:
XCTAssertThrowsSpecific
ожидает специфический класс исключения в качестве второго параметра. NSCAssert
бросает NSException
, Чтобы проверить это, используйте
XCTAssertThrowsSpecific([object methodThatShouldThrow], NSException, @"should throw an exception");
Теперь, это не очень поможет, потому что вполне вероятно, что каждое исключение является NSException
или его подкласс.
NSException
с name
свойство, определяющее тип исключения. В случае NSCAssert
это NSInternalInconsistencyException
, Чтобы проверить это, используйте XCTAssertThrowsSpecificNamed
XCTAssertThrowsSpecificNamed(
[object methodThatShouldThrow],
NSException,
NSInternalInconsistencyException,
@"should throw NSInternalInconsistencyException"
);