使用Swift进行单元测试:未执行封闭体

时间:2015-12-02 09:15:33

标签: swift unit-testing closures

有些功能可以向服务器发送请求,获取响应和打印结果。他们总是在IOS应用程序本身工作,但有时只在这个应用程序的单元测试中(看起来像随机)。

  

主要问题:xcode不会在单元测试中进入闭包体   跳过它。

任何想法如何解决? enter image description here

1 个答案:

答案 0 :(得分:9)

最可能的原因是因为请求的完成关闭未被执行,因为它们正在执行异步操作,而测试同步运行。这意味着测试在网络请求仍在处理时完成运行。

尝试使用XCTestExpectation

func testIt() {
  let expectation = expectationWithDescription("foobar")

  // request setup code here...

  Alamofire.request(.POST, "...")
    .responseJSON { response in
      //
      // Insert the test assertions here, for example:
      //
      if let JSON = response.result.value as? [String: AnyObject] {
        XCTAssertEqual(JSON["id"], "1")
      } else {
        XCTFail("Unexpected response")
      }

      //
      // Remember to call this at the end of the closure
      //
      expectation.fulfill()
  }

  //
  // This will make XCTest wait for up to 10 seconds,
  // giving your request expectation time to fulfill
  //
  waitForExpectationsWithTimeout(10) { error 
    if let error = error {
      XCTFail("Error: \(error.localizedDescription)")
    }
  }
}