web-dev-qa-db-fra.com

Test XCTest et asynchrone dans Xcode 6

Donc Apple a dit dans la note de publication de Xcode 6 que nous pouvons maintenant faire des tests asynchrones directement avec XCTest.

Tout le monde sait comment le faire en utilisant Xcode 6 Beta 3 (en utilisant objective-C ou Swift)? Je ne veux pas de la méthode connue des sémaphores, mais de la nouvelle méthode Apple.

J'ai cherché dans la note publiée et plus mais je n'ai rien trouvé. L'en-tête XCTest n'est pas très explicite non plus.

40
Dimillian

La vidéo des sessions est parfaite, fondamentalement, vous voulez faire quelque chose comme ça

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

Exemple d'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

La session 414 couvre les tests asynchrones dans Xcode6

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

11
mittens

Comment j'ai fait dans Swift2

Étape 1: définir l'attente

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

Étape 2: dites au test de répondre aux attentes juste en dessous de l'endroit où vous capturez la réponse

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

Étape 3: dites au test d'attendre que les attentes soient satisfaites

waitForExpectationsWithTimeout(10)

ÉTAPE 4: effectuer une assertion une fois l'appel asynchrone terminé

XCTAssertEqual(responseThatIGotFromAsyncRequest, expectedResponse)
1
Ankit Vij