iOS Xcode 8 / Swift 3 中的异步单元测试(waitForExpectations 失败)

iOS Asynchronous Unit Testing (waitForExpectations failing) in Xcode 8 / Swift 3

我正在更新我开发的 Cocoapod 以使用 Swift 3. 在我升级之前,我所有的异步单元测试都运行良好。但是现在升级后,每一个都立即失败,我不知道为什么。以下是每一个的结构:

override func setUp() {
        super.setUp()
        validationExpectation = expectation(description: "Validation")
}

.
.
.

func testSymbolRequest(){

        _ = MyCocoapod.makeSymbolRequest(symbol: "ABC", success: { (symbolObject) in
            self.validationExpectation.fulfill()
            XCTAssert(true)
        }) { (error) in
            self.validationExpectation.fulfill()
            XCTFail(error.description)
        }

        waitForRequestToFinish()
}

.
.
.

func waitForRequestToFinish(){
    waitForExpectations(timeout: 60.0) { (error) in
        if let error = error {
            XCTFail(error.localizedDescription)
        }
    }
}

waitForExpectations 函数根本没有等待。调用后立即失败。我还确认这与我的实际网络代码无关,并且请求在我的 Cocoapod 示例项目中工作得很好。我正在使用 Alamofire。我不认为这是问题所在,但我认为这可能值得一提。打印出来的错误信息是 "unknown error".

如果您正在尝试测试您正在开发的 CocoaPod,出于某种原因,它创建的默认测试目标会使 waitForExpectations() 函数无法针对该特定测试目标正常工作。通过按顺序执行以下步骤,我能够让它最终工作:

  1. 删除当前测试目标
  2. 创建新的测试目标
  3. 运行 pod 安装并确保 pod 文件已相应更新

按照这些步骤,我能够让 waitForExpectations() 最终在我的网络请求中工作。