如何在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
相关产品推荐
相关产品推荐

