owe*_*nfi 23 unit-testing objective-c nsexception ios xctest
我正在使用XCTest编写Cocoa单元测试,并且最近第一次使用了XCTAssertThrows.这很酷,但我想用XCTAssertThrowsSpecific让它变得更好,并且需要一定的异常.
这是一个示例测试:
-(void)testShortPassword {
XCTAssertThrows([user storePassword:@"abc"],@"Expect exception for short pw");
}
Run Code Online (Sandbox Code Playgroud)
在我的用户类中,我有以下代码:
-(void)storePassword:(NSString*)password {
NSCAssert(password.length > 6, @"Password must be longer than 6 characters");
// go on to store the password on the keychain
}
Run Code Online (Sandbox Code Playgroud)
请记住,Cocoa通常不会使用异常(因此最好返回错误,并在前面的示例中显示UI等).如何以可被捕获的方式抛出异常XCTAssertThrowsSpecific?我如何指定XCTAssertThrowsSpecific(expression, specificException, format...)?
Seb*_*ian 35
您应该仅对异常情况使用异常,而不是错误处理和流控制
话虽如此,这是你如何使用XCTAssertThrowsSpecific:
XCTAssertThrowsSpecific期望将异常的特定类作为第二个参数.NSCAssert抛出一个NSException.要测试它,请使用
XCTAssertThrowsSpecific([object methodThatShouldThrow], NSException, @"should throw an exception");
Run Code Online (Sandbox Code Playgroud)
现在,这无济于事,因为每个异常都可能是其中的一个NSException或一个子类.
NSExceptions具有name确定异常类型的属性.如果是NSCAssert这样的话NSInternalInconsistencyException.要测试它,请使用XCTAssertThrowsSpecificNamed
XCTAssertThrowsSpecificNamed(
[object methodThatShouldThrow],
NSException,
NSInternalInconsistencyException,
@"should throw NSInternalInconsistencyException"
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8751 次 |
| 最近记录: |