Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 等待调度主队列,然后继续单元测试_Swift_Unit Testing_Asynchronous - Fatal编程技术网

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:…