gpt4 book ai didi

swift - 如何在具有 100% 代码覆盖率的 Xcode 单元测试中编写 do {} catch {}

转载 作者:行者123 更新时间:2023-11-28 05:53:08 24 4
gpt4 key购买 nike

我是单元测试的新手,我希望尽可能实现接近 100% 的代码覆盖率,do {} catch {} 模式让我在试图实现该目标时感到悲伤。

给定这段代码:

func testUrlRequest_WithAuthenticationNoToken_ExpectingAuthenticationFailure() {
let mockController = MockAuthenticationController()
mockController.token = nil
Server.authenticationController = mockController
do {
_ = try Server.urlRequestWithHeaders(to: arbitraryEndpoint, excludeBearerToken: false)
XCTFail("Expected throw when no token is present")
} catch {
XCTAssertEqual(error as? Server.Errors, .authenticationFailure)
}
}

Server.urlRequestwithHeaders() 方法正确地抛出一个错误,该错误被 catch {} block 捕获,但 Xcode 为我提供了以下代码覆盖率结果:

xcode code coverage not 100%

似乎它有两个问题,第一个是永远不会执行 XCTFail() 的警告(红色虚线警告),然后是与代码中最后一个“}”匹配的 0 红色覆盖范围,所以我假设它是一些自动的- 生成永远不会执行的返回代码。

有什么方法可以正确地告诉 Xcode 绝对不希望采用代码路径,因此就代码覆盖率而言忽略它?或者当您需要生成单元测试异常时是否有更好的模式可以遵循?

最佳答案

如评论中所述,您应该预料到您的单元测试代码不会完全覆盖;特别是对于 XCTFail 调用。单元测试的全部目标是永远不要碰到那条线

即使您重构了源代码以将 XCTFail 带到其他地方,您仍然打算让它永远不会执行。您可以通过再次使用 XCTAssertEqual 来完成更多的代码覆盖。

func testUrlRequest_WithAuthenticationNoToken_ExpectingAuthenticationFailure() {
let mockController = MockAuthenticationController()
mockController.token = nil
Server.authenticationController = mockController
var failed = false
do {
_ = try Server.urlRequestWithHeaders(to: arbitraryEndpoint, excludeBearerToken: false)
} catch {
XCTAssertEqual(error as? Server.Errors, .authenticationFailure)
failed = true
}
XCTAssertEqual(failed, true, "Expected throw when no token is present")
}

关于swift - 如何在具有 100% 代码覆盖率的 Xcode 单元测试中编写 do {} catch {},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52204616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com