You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Swift Testing Library中验证抛出的BankAccountError.invalidAmount异常

Swift Testing Library 验证指定异常类型的方法

在Swift Testing Library的#expect断言的throws闭包中,你可以通过以下两种方式验证抛出的错误是否为BankAccountError.invalidAmount类型:

方法1:仅验证异常类型

如果只需要确认抛出的错误是目标枚举case,直接用is关键字检查类型即可:

@Test func depositNegativeAmountThrowsError() {
    let bankAccount = BankAccount(accountNumber: "1234", balance: 500)
    
    #expect("Invalid amount.", performing: {
        try bankAccount.deposit(amount: -100, depositType: .check)
    }, throws: { error in
        // 直接检查错误是否为指定的枚举case类型
        #expect(error is BankAccountError.invalidAmount)
    })
}

方法2:验证类型并检查关联值

如果需要进一步验证错误携带的关联值(比如这里的负数金额),可以先将错误类型转换为BankAccountError,再匹配对应的case并断言关联值:

@Test func depositNegativeAmountThrowsError() {
    let bankAccount = BankAccount(accountNumber: "1234", balance: 500)
    
    #expect("Invalid amount.", performing: {
        try bankAccount.deposit(amount: -100, depositType: .check)
    }, throws: { error in
        // 先转换为目标错误类型,转换失败则直接断言失败
        guard let bankError = error as? BankAccountError else {
            #expect(false, "抛出的错误不是BankAccountError类型")
            return
        }
        
        // 匹配对应的case并验证关联值
        switch bankError {
        case .invalidAmount(let amount):
            #expect(amount == -100, "预期错误关联值为-100,实际为\(amount)")
        }
    })
}

说明

  • error is BankAccountError.invalidAmount会直接判断错误是否属于该枚举case的实例,无需关心关联值。
  • 类型转换error as? BankAccountError可以安全地将通用Error转换为自定义枚举类型,转换失败时通过#expect(false)标记测试不通过。
  • 结合switch语句可以精准匹配目标case,并对关联值做进一步断言,确保业务逻辑的准确性。

内容的提问来源于stack exchange,提问作者user19037628

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:44:51