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

处理非结构化并发时,如何用Swift Testing编写谓词预期测试?

在Swift Testing中验证值的异步变化

在非结构化并发场景下验证某个值最终发生变化,Swift Testing提供了更简洁的异步断言方式,无需依赖NSPredicate或XCTNSPredicateExpectation。

替代XCTest实现的Swift Testing代码

import Testing

@Test func testServiceValueUpdates() async {
    let service = SomeService()
    let expectedValue = "your-target-value"
    
    // 触发会异步修改值的操作
    service.doSomething(expectedValue)
    
    // 等待条件满足,超时时间设为1秒
    try await wait(for: 1.0) {
        #expect(service.something == expectedValue)
    }
}

关键说明

  • 测试函数必须标记为async,以支持异步测试逻辑
  • wait(for:_:)函数会定期执行闭包内的断言,直到断言通过或达到超时时间
  • 如果需要更复杂的检查逻辑,也可以在闭包里编写自定义判断,配合#expect抛出断言失败

原XCTest实现对比

你之前在XCTest中的实现:

let predicate = NSPredicate { service, _ in
    guard let service = service as? SomeService else {
        return false
    }
    return service.something == expectedValue
}
let expectation = XCTNSPredicateExpectation(predicate: predicate, object: service)

sut.doSomething(expectedValue)

wait(for: [expectation], timeout: 1.0)

Swift Testing的写法去掉了繁琐的谓词和期望对象创建,直接将断言逻辑嵌入等待闭包,代码更直观简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:12:06