Swift 等待调度主队列,然后继续单元测试
我在一个类中使用了这个方法:Swift 等待调度主队列,然后继续单元测试,swift,unit-testing,asynchronous,Swift,Unit Testing,Asynchronous,我在一个类中使用了这个方法: func handleResp(_ dataGotten: Result<Response?, Error>) { .... DispatchQueue.main.async { .... GlobalStaticStruct.code = 7 ... } } } 我需要能够测试
func handleResp(_ dataGotten: Result<Response?, Error>) {
....
DispatchQueue.main.async {
....
GlobalStaticStruct.code = 7
...
}
}
}
我需要能够测试GlobalStaticStruct.code不是nil,而是测试在主队列之前完成,因此字段始终为nil
我理解使用期望来克服类似的问题,但在这种情况下,我无法联系到任何处理者
如何使测试等待主方法触发并完成,然后测试GlobalStaticStruct.code的值
提前谢谢 特别是对于
main
队列,您可以使用它是串行队列这一事实。因此,如果您将支票安排在handleResp
之后在同一队列上运行,您的支票将通过。在检查之后,您可以使用Expection同步测试:
func testhandleResp() {
subject = SomeClass()
subject.handleResp(successResponse)
let expectation = XCTestExpectation()
DispatchQueue.main.async { // scheduled after subject.handleResp
XCTAssertNotNil(GlobalStaticStruct.code)
expectation.fulfill()
}
wait(for: [expectation], timeout: 10.0)
}
如果它是任何其他(可能是并发的)线程,您可以执行相同的操作,但是使用
schedule将验证块调度到以后运行(在:…
之后,特别是对于main
队列,您可以使用这一事实,即它是一个串行队列。因此,如果您计划在handleResp
之后在同一队列上运行您的检查,您的检查将通过。并且您可以使用Expection在该检查之后同步测试:
func testhandleResp() {
subject = SomeClass()
subject.handleResp(successResponse)
let expectation = XCTestExpectation()
DispatchQueue.main.async { // scheduled after subject.handleResp
XCTAssertNotNil(GlobalStaticStruct.code)
expectation.fulfill()
}
wait(for: [expectation], timeout: 10.0)
}
如果它是任何其他(可能是并发的)线程,您可以执行相同的操作,但可以使用schedule(after:…