ios - objective - xcode documentation
Pruebas XCTest y asÃncronas en Xcode 6 (4)
Así que Apple dijo en la nota de lanzamiento de Xcode 6 que ahora podemos hacer pruebas asíncronas directamente con XCTest.
¿Alguien sabe cómo hacerlo utilizando Xcode 6 Beta 3 (utilizando object-C o Swift)? No quiero el método de semáforo conocido, sino la nueva forma de Apple.
Busqué en la nota publicada y más, pero no encontré nada. El encabezado XCTest tampoco es muy explícito.
Como lo hice en swift2
Paso 1: definir expectativas
let expectation = self.expectationWithDescription("get result bla bla")
Paso 2: diga a la prueba que cumpla con las expectativas justo debajo de donde captura la respuesta
responseThatIGotFromAsyncRequest = response.result.value
expectation.fulfill()
Paso 3: Dile a la prueba que espere hasta que se cumpla la expectativa
waitForExpectationsWithTimeout(10)
PASO 4: hacer una aserción después de que finalice la llamada asíncrona
XCTAssertEqual(responseThatIGotFromAsyncRequest, expectedResponse)
Ejemplo de 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);
}
}];
}
El video de las sesiones es perfecto, básicamente quieres hacer algo como esto.
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)
}
La sesión 414 cubre las pruebas asíncronas en Xcode6