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

Swift Testing中使用#expect宏引发崩溃的问题咨询

Swift Testing中使用#expect宏引发崩溃的问题咨询

大家好,我最近在用Swift Testing框架写测试用例时碰到了一个特别奇怪的崩溃问题,想请教下有没有朋友遇到过类似情况,或者能帮忙分析下原因。

先给大家看两段测试代码的对比:

正常运行的测试代码

下面这段代码跑100次都不会失败,虽然只是打印属性值没做实际断言,但执行全程正常:

@MainActor @Test func doesHandleResultCorrectly() async {
    let manager = Mock()
    let (view,vm) = getView(manager: manager)
    view.handleSuccess(of: .owned)
    print(vm.wasHandledCalled)
}

触发崩溃的测试代码

但只要加上#expect宏做断言,测试就会先挂起10-15秒,然后直接崩溃:

@MainActor @Test func doesHandleResultCorrectly() async {
    let manager = Mock()
    let (view,vm) = getView(manager: manager)
    view.handleSuccess(of: .owned)
    #expect(vm.wasHandledCalled) // ERROR: Thread 1: EXC_BAD_ACCESS (code=2, address=0x16ac0bdf8)
}

崩溃时,#expect宏被展开成了这段代码:

Testing.__checkPropertyAccess(vm.self, getting: { $0.wasHandledCalled }, expression: .__fromPropertyAccess(.__fromSyntaxNode("vm"), .__fromSyntaxNode("wasHandledCalled")), comments: [], isRequired: false, sourceLocation: Testing.SourceLocation.__here()).__expected()

我已经做的排查

  • 我本来怀疑是线程问题,但测试方法加了@MainActor限定,而且用Thread Sanitizer跑了一遍,完全没检测出线程相关的问题
  • 单独打印vm.wasHandledCalled是完全正常的,说明这个属性本身是可以正常访问的

有没有人遇到过类似的Swift Testing宏崩溃的情况?或者能帮我分析下,为什么直接访问属性没问题,用#expect宏包裹后就触发了EXC_BAD_ACCESS错误呢?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 11:03:08