XCTest и асинхронное тестирование в Xcode 6
Итак, Apple сообщила в примечании к выпуску Xcode 6, что теперь мы можем провести асинхронное тестирование непосредственно с XCTest.
Кто-нибудь знает, как это сделать, используя Xcode 6 Beta 3 (используя objective-C или Swift)? Мне не нужен известный метод семафора, но новый способ Apple.
Я просмотрел выпущенную заметку и многое другое, но ничего не нашел. Заголовок XCTest тоже не очень явный.
Ответы
Ответ 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);
}
}];
}
Ответ 3
Сессия 414 охватывает асинхронное тестирование в Xcode6
https://developer.apple.com/videos/wwdc/2014/#414
Ответ 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)