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

