测试 swift 异步函数超时

2024-01-22

如何编写一个单元测试来检查异步函数是否不会超时?

我正在尝试常规XCTestExpectation, 但是因为await暂停一切,是等不到期待。

在下面的代码中,我正在检查loader.perform()执行时间不超过1秒。

func testLoaderSuccess() async throws {    
    let expectation = XCTestExpectation(description: "doesn't timeout")

    let result = try await loader.perform()

    XCTAssert(result.value == 42)

    wait(for: [expectation], timeout: 1) // execution never gets here

    expectation.fulfill()
}

如果任务超时,取消任务可能是明智的做法:

func testA() async throws {
    let expectation = XCTestExpectation(description: "timeout")

    let task = Task {
        let result = try await loader.perform()
        XCTAssertEqual(result, 42)
        expectation.fulfill()
    }

    await fulfillment(of: [expectation], timeout: 1)
    task.cancel()
}

如果你不,perform即使之后仍可能继续运行testA在失败场景中完成。


另一种方法是使用任务组:

func testB() async throws {
    try await withThrowingTaskGroup(of: Void.self) { group in
        group.addTask {
            let result = try await self.loader.perform()
            XCTAssertEqual(result, 42)
        }
        group.addTask {
            try await Task.sleep(for: .seconds(1))
            XCTFail("Timed out")
        }
        let _ = try await group.next() // wait for the first one
        group.cancelAll()              // cancel the other one
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测试 swift 异步函数超时 的相关文章

随机推荐

  • 将提供程序注入另一个提供程序

    假设我们有一个名为Comp和两个 Injectable提供者称为P1 and P2 P1需要一个实例P2 P1被注入Comp 如果我声明两个提供商都在 它就可以正常工作Comp像这样 Component providers P1 P2 ex
  • 如何清除 StyledDocument 中的所有样式?

    样式文档 http docs oracle com javase 7 docs api javax swing text StyledDocument html包含各种设置样式的方法 喜欢设置角色属性 http docs oracle co
  • pygame 中有像海龟一样的 .stamp() 方法吗?

    我正在开发一个简单的 pygame 项目 在其中您可以通过按空格来克隆自己 我在 Turtle 中使用以下命令创建了这个项目Turtle stamp 但我不确定pygame中是否存在这样的东西 简短回答 不 没有一个 长答案 但是 您可以轻
  • 如何在 Swift 中加载 UIWebView 中的 URL?

    我有以下代码 UIWebView loadRequest NSURLRequest URL NSURL string google ca 我收到以下错误 NSURLRequest 无法转换为 UIWebView 知道问题是什么吗 加载请求
  • Angular2 - “无法绑定到‘ngSwitchWhen’,因为它不是‘模板’的已知属性。”

    我收到以下错误 无法绑定到 ngSwitchWhen 因为它不是 模板 的已知属性 我读过不同的主题 建议添加 从 angular common 导入 CommonModule 并将 CommonModule 添加到 NgModel的导入部
  • Xcode 8 beta 6 - 架构的冲突值

    我尝试使用 Xcode beta 6 在设备上安装我的应用程序 但它在链接阶段失败并出现以下错误 ld linking module flags Objective C Class Properties IDs have conflicti
  • 应用两个数据框

    我正在使用 R 并且我有两个 data frames A and B 它们都有 6 行 但是A有 25000 个列 基因 并且B有 30 列 我想应用一个带有两个参数的函数f x y where x是每一列A and y是每一列B 到目前为
  • C# 将列表拆分为 n 组的所有组合 - 来自 Python 的代码迁移

    我所追求的算法有一个很好的实现here https stackoverflow com questions 39192777 python split a list into n groups in all possible combina
  • 扩展 Laravel 核心日志记录

    我回来时遇到了更多 Laravel 问题 因为我在理解事物方面遇到了问题 再次 我尝试创建一个包来进行我自己的日志记录 在进行了一些额外的阅读 浏览核心代码并尝试其他方法之后 我得出的结论是 我需要做的就是扩展 laravel 日志记录的核
  • 加载内容后显示引导模式

    我正在使用 Bootstrap 3 模式 其中我从 getJson 函数加载一些数据 由于模式内的数据加载速度不一样快 我想显示加载图像 文本 加载所有数据后 然后显示 打开模式 我找到了这个Thread https stackoverfl
  • Html显示格式化文本

    我必须在 html 页面上显示一堆文本 文本看起来像这样 001 This is a Line 00 12 04 002 003 Everthing looks good so far 文本是 预先格式化的 包含大量空格和破折号 每行都具有
  • JQuery 到 asmx 在 Windows 2008 R2 SP1 上失败

    自从安装 SP1 以来 我们在从 JQuery 客户端代码调用 asmx 页面时遇到了问题 IIS 将 JQuery post 调用指向他的默认 404 页面 我们对环境进行了角色恢复 断言此问题是由 SP1 引起的 并且测试证实了这一点
  • mongodb-java POJO不返回id

    我是 MongoDB 的新手 在这里有点疯狂 我正在使用最新的 mongo java driver 版本和 dropwizard 我使用 POJO 写入 DDBB 它有效 但是 当尝试获取元素时 我没有得到实际的 id 这是我尝试过的 DD
  • 如何在数字的最后三位数字之前插入小数点?

    我有一个数字 需要添加小数以进行格式化 该数字保证在 1000 到 999999 之间 我已经以其他方式介绍了其他可能性 这是我无法理解的 我需要在最后 3 位数字之前添加小数 例如 1000 gt 1 000 23513 gt 23 51
  • 我可以向 HTML 标记添加自定义属性吗?

    我可以向 HTML 标记添加自定义属性吗 如下所示
  • 在 Google App Engine 中创建表单自动完成

    我想为标签字段构建一个自动完成功能 就像 App Engine 上的 SO 一样 知道我应该如何进行这个过程吗 服务器端算法 自动完成应该有什么逻辑 应用程序引擎实施 数据存储架构应该是什么 嘿 几天前我就遇到了这个问题 只要您有想要搜索的
  • 如何在 ASP.Net Core Razor 页面中返回带有模型的页面

    如何重定向到页面并传递其模型 就像我们在 MVC 中所做的那样return View model MyModel 我尝试过的 return RedirectToPage Notify new Model notifierVM 注意 我要返回
  • 如何立即关闭 C 程序?

    我正在编写 C 代码 在其中分析一些数据 我已将程序设置为仅处理 100 个数据输入 当输入超过 100 个时 就会出现分段错误 我想创建一种方法 以便当输入数量超过 100 时 用户将收到警告并且程序将终止 我知道如何从主要功能中简单地做
  • MyGroups 未在 Communicator.UIAutomation 中实现

    我正在开发一个浏览器外的 Silverlight 应用程序 它提供了一些 MS Office Communicator 2007 控件 我正在使用 与 SDK 一起安装的文档指出 IMessenger2 界面中有一个 MyGroups 属性
  • 测试 swift 异步函数超时

    如何编写一个单元测试来检查异步函数是否不会超时 我正在尝试常规XCTestExpectation 但是因为await暂停一切 是等不到期待 在下面的代码中 我正在检查loader perform 执行时间不超过1秒 func testLoa