- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 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
具有确定异常类型的 name
属性。在 NSCAsert
的情况下,这是 NSInternalInconsistencyException
。要对此进行测试,请使用 XCTAssertThrowsSpecificNamed
XCTAssertThrowsSpecificNamed(
[object methodThatShouldThrow],
NSException,
NSInternalInconsistencyException,
@"should throw NSInternalInconsistencyException"
);
关于ios - 如何使用 XCTAssertThrowsSpecific,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20415401/
我正在使用 XCTest 编写 Cocoa 单元测试,最近第一次使用 XCTAssertThrows。这很酷,但我想使用 XCTAssertThrowsSpecific 并需要特定的异常来让它变得更好
使用 XCTest,测试执行以下操作: XCTAssertThrowsSpecificNamed([does something that breaks], NSException, NSInvali
我是一名优秀的程序员,十分优秀!