在Xcode 6中进行XCTest和asynchronoustesting

所以苹果在Xcode 6的发布logging中说,我们现在可以直接使用XCTest进行asynchronoustesting。

任何人都知道如何使用Xcode 6 Beta 3(使用Objective-C或Swift)? 我不想要已知的信号量方法,而是新的苹果方式。

我search了发布的音符和更多,但我什么也没find。 XCTest标题也不是很明确。

Obj-C示例:

- (void)testAsyncMethod { //Expectation XCTestExpectation *expectation = [self expectationWithDescription:@"Testing Async Method Works!"]; [MyClass asyncMethodWithCompletionBlock:^(NSError *error, NSHTTPURLResponse *httpResponse, NSData *data) { if(error) { NSLog(@"error is: %@", error); }else{ NSInteger statusCode = [httpResponse statusCode]; XCTAssertEqual(statusCode, 200); [expectation fulfill]; } }]; [self waitForExpectationsWithTimeout:5.0 handler:^(NSError *error) { if(error) { XCTFail(@"Expectation Failed with error: %@", error); } }]; } 

会议video是完美的,基本上你想要做这样的事情

 func testFetchNews() { let expectation = self.expectationWithDescription("fetch posts") Post.fetch(.Top, completion: {(posts: [Post]!, error: Fetcher.ResponseError!) in XCTAssert(true, "Pass") expectation.fulfill() }) self.waitForExpectationsWithTimeout(5.0, handler: nil) } 

Session 414涵盖了Xcode6中的asynchronoustesting

https://developer.apple.com/videos/wwdc/2014/#414

我在swift2中做了些什么

第一步:定义期望

 let expectation = self.expectationWithDescription("get result bla bla") 

步骤2:告诉testing在下面捕获响应的地方完成预期

 responseThatIGotFromAsyncRequest = response.result.value expectation.fulfill() 

第三步:告诉考试等到期望完成

 waitForExpectationsWithTimeout(10) 

STEP 4:asynchronous调用完成后断言

 XCTAssertEqual(responseThatIGotFromAsyncRequest, expectedResponse)