Dar*_*ell 7 unit-testing ios xctest
我正在尝试使用 Xcode 中的单元测试来测试一些异步代码,但是我遇到了一个阻塞的主线程。
问题是一些被测试的代码期望从 iOS 类 (AVFoundation) 接收回调。但是,似乎 AVFoundation 类只会在主线程上回调。
问题是,如果我正在进行异步单元测试,那么测试实际上会在主线程等待时阻塞它,因此永远无法发送回调。
我很确定这就是问题所在。有什么方法可以从另一个线程运行测试或者有一个XCTWaiter不阻塞主线程的方法吗?
编辑:在查看了一些文档之后,似乎最好的方法是在后台线程上运行整个测试用例。但是,在我当前的项目中,所有测试都是自动设置的。我想知道是否有人知道如何设置测试用例/手动运行。这样我就可以在另一个线程上运行它。
小智 5
这已经晚了一年多,所以可能不再相关了,但是我遇到了这个问题,因为我意识到 XCTestExpectation 解决了这个问题(不确定在您发布问题时是否可用)。
等待期望不会阻塞主线程,并允许异步分派到主线程的其他工作按预期进行。希望这可以帮助
考虑@BetterLateThanNever 的回答。这是我如何在主线程中使用回调测试代码的代码片段。
func test() {
let expectation = XCTestExpectation(description: "Test")
DispatchQueue.global(qos: .default).async {
...
...
let myObj = MyObj()
myObj.runSomethingMayWaitForMainThread()
...
...
XCTAssert(myObj.result)
expectation.fulfill()
}
wait(for: [expectation], timeout: 50.0)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1811 次 |
| 最近记录: |