在XCode中进行单元测试时,我发现无法从另一个线程在主线程上运行代码。这个代码出了什么问题?变量run
未重置
import XCTest
class TestMainThread: XCTestCase {
override func setUpWithError() throws {
}
override func tearDownWithError() throws {
}
func testMain() throws {
var run = true
DispatchQueue.main.async {
// return to the main thread so can interact with UI
run = false
}
while run {
print("Running")
usleep(1000000)
}
}
}
您不能在XCTest中使用DispatchQueue。但是,您可以在测试的类中使用它,并在那里更改值。
func operationToBeTested(completion: @escaping () -> Void) {
...
DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
completion()
}
}
func test_operationToBeTested() {
let exp = expectation(description: "asyncTest")
XCTAssertFalse(mockView.isPrepareUICalled)
mockClass.operationToBeTested {
exp.fulfill()
XCTAssertTrue(...)
}
waitForExpectations(timeout: 5)
}
p.s.:正如@Rob在评论中解释的那样,当我们写";期望";。