Xcode 8 / Swift 3 中的 iOS 异步单元测试(waitForExpectations 失败)
Posted
技术标签:
【中文标题】Xcode 8 / Swift 3 中的 iOS 异步单元测试(waitForExpectations 失败)【英文标题】:iOS Asynchronous Unit Testing (waitForExpectations failing) in Xcode 8 / Swift 3 【发布时间】:2016-09-25 20:42:02 【问题描述】:我正在更新我为使用 Swift 3 而开发的 Cocoapod。在升级之前,我所有的异步单元测试都运行良好。但是现在升级后,它们中的每一个都立即失效,我不知道为什么。以下是每一个的结构:
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。我认为这不是问题,但我认为这可能值得一提。打印出来的错误信息是“未知错误”。
【问题讨论】:
【参考方案1】:如果您尝试测试您正在开发的 CocoaPod,出于某种原因,它创建的默认测试目标会使 waitForExpectations() 函数无法针对该特定测试目标正常工作。通过按顺序执行以下步骤,我能够让它最终工作:
-
删除当前测试目标
创建新的测试目标
运行 pod install 并确保 pod 文件已相应更新
按照这些步骤,我能够让 waitForExpectations() 最终在我的网络请求中工作。
【讨论】:
以上是关于Xcode 8 / Swift 3 中的 iOS 异步单元测试(waitForExpectations 失败)的主要内容,如果未能解决你的问题,请参考以下文章
iOS:UIView 的 Autolayout 拉伸高度过多(Xcode 8、Swift 3)
使用 swift 3 Xcode 8.2.1 在 iOS 上运行预构建的可执行文件
iOS 10 / Swift 3.0 / XCode 8 总结
如何在 Xcode 8/Swift 3 中创建 iOS liveView [重复]