私はXCTestを使用してCocoaユニットテストを作成しており、最近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
}
_
Cocoaは一般に、例外の使用を避けていることに注意してください(したがって、エラーを返し、前の例でUIを表示する方がよい場合があります)。XCTAssertThrowsSpecific
がキャッチできる方法で例外をスローするにはどうすればよいですか? XCTAssertThrowsSpecific(expression, specificException, format...)
でそれを指定するにはどうすればよいですか?
例外は例外的な場合にのみ使用し、エラー処理やフロー制御には使用しないでください
そうは言っても、XCTAssertThrowsSpecific
の使い方は次のとおりです。
XCTAssertThrowsSpecific
は、例外の特定のクラスを2番目のパラメーターとして予期します。 NSCAssert
はNSException
をスローします。それをテストするには、
XCTAssertThrowsSpecific([object methodThatShouldThrow], NSException, @"should throw an exception");
さて、すべての例外がNSException
またはそのサブクラスである可能性が高いため、これはあまり役に立ちません。
NSException
sには、例外のタイプを決定するname
プロパティがあります。 NSCAssert
の場合、これはNSInternalInconsistencyException
です。それをテストするには、XCTAssertThrowsSpecificNamed
を使用します
XCTAssertThrowsSpecificNamed(
[object methodThatShouldThrow],
NSException,
NSInternalInconsistencyException,
@"should throw NSInternalInconsistencyException"
);