Подтвердить что ты не робот

XCTest и асинхронное тестирование в Xcode 6

Итак, Apple сообщила в примечании к выпуску Xcode 6, что теперь мы можем провести асинхронное тестирование непосредственно с XCTest.

Кто-нибудь знает, как это сделать, используя Xcode 6 Beta 3 (используя objective-C или Swift)? Мне не нужен известный метод семафора, но новый способ Apple.

Я просмотрел выпущенную заметку и многое другое, но ничего не нашел. Заголовок XCTest тоже не очень явный.

4b9b3361

Ответ 1

Видео сеанса идеально, в основном вы хотите сделать что-то вроде этого

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

Ответ 2

Пример 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);
        }

    }];
}

Ответ 4

Как я сделал это в swift2

Шаг 1: определение ожидания

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

Шаг 2: скажите тесту, чтобы выполнить ожидание прямо ниже, где вы берете ответ

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

Шаг 3: Скажите тесту, чтобы он ожидал выполнения ожидания

waitForExpectationsWithTimeout(10)

STEP 4: сделать утверждение после завершения асинхронного вызова

XCTAssertEqual(responseThatIGotFromAsyncRequest, expectedResponse)