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() 函数无法针对该特定测试目标正常工作。通过按顺序执行以下步骤,我能够让它最终工作:
- 删除当前测试目标
- 创建新的测试目标
- 运行 pod 安装并确保 pod 文件已相应更新
按照这些步骤,我能够让 waitForExpectations() 最终在我的网络请求中工作。
我正在更新我开发的 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() 函数无法针对该特定测试目标正常工作。通过按顺序执行以下步骤,我能够让它最终工作:
- 删除当前测试目标
- 创建新的测试目标
- 运行 pod 安装并确保 pod 文件已相应更新
按照这些步骤,我能够让 waitForExpectations() 最终在我的网络请求中工作。