2016-12-14 2 views
6

Ich führe einen UI-Test aus, bei dem ich eine asynchrone Funktion mit der API waitForExpectations testen muss.API-Verletzung bei Verwendung von waitForExpections

Ich erhalte diese Fehlermeldung:

"NSInternalInconsistencyException", "API violation - call made to wait without any expectations having been set."

Ich verstehe wirklich nicht, wie ich richtig die Erwartung geschaffen haben.

Außerdem scheint es einen Dokumentationsfehler zu geben: laut der Dokumentation ist die API expectation(description:), aber der Compiler akzeptiert das nicht, stattdessen muss ich XCTestExpectation() verwenden, um einen zu erstellen.

func testExample() { 
    XCTAssertTrue(state == .STATE_NOT_READY) 
    let exp1 = XCTestExpectation() 

    let queue = DispatchQueue(label: "net.tech4freedom.AppTest") 
    let delay: DispatchTimeInterval = .seconds((2)) 
    queue.asyncAfter(deadline: .now() + delay) { 
     XCTAssertTrue(true) 
     exp1.fulfill() 
    } 

    self.waitForExpectations(timeout: 4){ [weak self] error in 
     print("X: async expectation") 
     XCTAssertTrue(true) 
    } 
    self.waitForExpectations(timeout: 10.0, handler: nil) 
} 
+0

Welche Fehler Sie erhalten, wenn Sie 'self.expectation (Beschreibung) verwenden'? Weil dies der richtige Weg wäre, um dies zu tun, sonst weiß Ihre Testklasse nicht, dass Sie Ihre Erwartung erstellt haben. – Losiowaty

+0

Wenn ich versuche, die Erwartung mit dem Parameter description (let exp1 = XCTestExpectation (Beschreibung: "ss2")), bekomme ich "Argument übergeben, um keine Argumente zu nehmen" – onthemoon

Antwort

8

Ok, Ihr Fehler ist, dass Sie versuchen, die Erwartung direkt instanziieren. Die docs sagen eindeutig

Use the following XCTestCase methods to create XCTestExpectation instances:
- expectation(description:)

Das bedeutet, dass Sie die Erwartungen wie diese schaffen sollte:

func testMethod() { 
    let exp = self.expectation(description: "myExpectation") 
    // your test code 
} 
+1

Sie könnten auch die API 'wait (für Erwartungen : [XCTestExpectation], Timeout Sekunden: TimeInterval) und geben die Erwartungen ein, wenn sie von einer Teststubklasse stammen. –

Verwandte Themen