2016-04-20 11 views
1

Ich bin neu in XCTest und fing an, Testfälle zu schreiben. Ich habe ein paar funktionale Testfälle geschrieben, aber ich bin im folgenden asynchronen Methodenaufruf steckengeblieben. Ich habe die XCTestExpectation-Klassenreferenz gelesen, konnte aber nicht korrekt mokieren.Async Method Testing mit XCTest

Es wird sehr hilfreich sein, wenn Sie lernen, wie Sie unten die Methode testen.

Hier sind die Details der Methode, die ich testen wollen,

- (void)getStudentInfo:(void (^)(BOOL))success failure:(void (^)(NSError *error))failure { 


    // Request formation CODE 
    // Here I have post call to AFNetworking 

    [httpSessionManager POST:uri 
    parameters:para 
     success:^(NSURLSessionDataTask *task, id responseObject) { 

     failure:^(NSURLSessionDataTask *task, NSError *error) { 
     }] 



    } 
+0

Obwohl es Techniken für das asynchrone Testen mit Komponententests gibt, sind asynchrone Prozesse und Komponententests in der Regel nicht geeignet. – ThomasW

Antwort

3

Sie müssen schauen Sie in XCTest Erwartungen, die zum Testen von Asynchron unterstützen. Hier ist ein vereinfachtes Beispiel (in Swift, aber das gleiche gilt für Objective-C)

func testAsync() { 

    let expectation = expectationWithDescription("Waiting for something") 

    let someObject = ... 
    someObject.doSomethingWithCompletion({() in 
      expectation.fulfill() 
     }) 

    waitForExpectationsWithTimeout(3.0, handler: nil) 

    // Verify Results 
} 

Die einfache Erklärung ist, dass der Test auf den waitFor... warten, bis die fulfil() Methode aufgerufen wird. Oder Timeout und einen Fehler werfen.

Sie können auch Erwartungen für Benachrichtigungen und Eigenschaften festlegen. Überprüfen Sie die XCTest-Klasse für Details.