だからAppleはXcode 6のリリースノートで、XCTestで直接非同期テストを行えるようになったと言った。
Xcode 6 Beta 3(objective-CまたはSwiftを使用)を使用してそれを行う方法を知っている人はいますか?既知のセマフォメソッドは必要ありませんが、新しいApple way。
リリースされたメモなどを検索しましたが、何も見つかりませんでした。 XCTestヘッダーも明示的ではありません。
セッションビデオは完璧です、基本的にはあなたはこのようなことをしたいです
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)
}
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);
}
}];
}
セッション414では、Xcode6での非同期テストについて説明します
Swift2でのやり方
ステップ1:期待値を定義する
let expectation = self.expectationWithDescription("get result bla bla")
ステップ2:応答をキャプチャする場所のすぐ下で期待値を満たすようにテストに指示する
responseThatIGotFromAsyncRequest = response.result.value
expectation.fulfill()
ステップ3:期待が満たされるまで待つようテストに指示する
waitForExpectationsWithTimeout(10)
ステップ4:非同期呼び出しが終了した後にアサーションを作成します
XCTAssertEqual(responseThatIGotFromAsyncRequest, expectedResponse)