web-dev-qa-db-ja.com

Xcode 6でのXCTestと非同期テスト

だからAppleはXcode 6のリリースノートで、XCTestで直接非同期テストを行えるようになったと言った。

Xcode 6 Beta 3(objective-CまたはSwiftを使用)を使用してそれを行う方法を知っている人はいますか?既知のセマフォメソッドは必要ありませんが、新しいApple way。

リリースされたメモなどを検索しましたが、何も見つかりませんでした。 XCTestヘッダーも明示的ではありません。

40
Dimillian

セッションビデオは完璧です、基本的にはあなたはこのようなことをしたいです

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)
}
52
Dimillian

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);
        }

    }];
}
65
jonbauer

セッション414では、Xcode6での非同期テストについて説明します

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

11
mittens

Swift2でのやり方

ステップ1:期待値を定義する

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

ステップ2:応答をキャプチャする場所のすぐ下で期待値を満たすようにテストに指示する

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

ステップ3:期待が満たされるまで待つようテストに指示する

waitForExpectationsWithTimeout(10)

ステップ4:非同期呼び出しが終了した後にアサーションを作成します

XCTAssertEqual(responseThatIGotFromAsyncRequest, expectedResponse)
1
Ankit Vij