我有几个单元测试,我想在其中测试是否在正确的调度队列上调用回调。
在 Swift 2 中,我将当前队列的标签与我的测试队列进行了比较。但是在 Swift 3 中,DISPATCH_CURRENT_QUEUE_LABEL
常量不再存在。
我确实找到了 dispatch_assert_queue
函数。这似乎是我需要的,但我不确定如何调用它。
我的 Swift 2 代码:
let testQueueLabel = "com.example.my-test-queue"
let testQueue = dispatch_queue_create(testQueueLabel, nil)
let currentQueueLabel = String(UTF8String: dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL))!
XCTAssertEqual(currentQueueLabel, testQueueLabel, "callback should be called on specified queue")
更新:
我对缺少自动完成感到困惑,但可以使用 __dispatch_assert_queue
:
if #available(iOS 10.0, *) {
__dispatch_assert_queue(test1Queue)
}
虽然这确实适用于单元测试,但它很烦人地用 EXC_BAD_INSTRUCTION
停止了整个过程,而不仅仅是测试失败。
最佳答案
使用dispatchPrecondition(.onQueue(expectedQueue))
,dispatch_assert_queue()
C API 的 Swift 3 API 替换。
WWDC 2016 GCD session (21:00,幻灯片 128)对此进行了介绍: https://developer.apple.com/videos/play/wwdc2016/720/
关于swift - 检查 Swift 3 中是否在正确的调度队列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37952262/