如何使用XCTAssertThrowsSpecific

 -断桥再见-_974_328 发布于 2023-02-12 15:31

我正在使用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...)

1 个回答
  • 您应该仅对异常情况使用异常,而不是错误处理和流控制

    话虽如此,这是你如何使用XCTAssertThrowsSpecific:

    XCTAssertThrowsSpecific期望将异常的特定类作为第二个参数.NSCAssert抛出一个NSException.要测试它,请使用

    XCTAssertThrowsSpecific([object methodThatShouldThrow], NSException, @"should throw an exception");
    

    现在,这无济于事,因为每个异常都可能是其中的一个NSException或一个子类.

    NSExceptions具有name确定异常类型的属性.如果是NSCAssert这样的话NSInternalInconsistencyException.要测试它,请使用XCTAssertThrowsSpecificNamed

    XCTAssertThrowsSpecificNamed(
      [object methodThatShouldThrow],
      NSException,
      NSInternalInconsistencyException,
      @"should throw NSInternalInconsistencyException"
    );
    

    2023-02-12 15:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有