我正在使用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
期望将异常的特定类作为第二个参数.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" );