2016-12-14 18 views
6

Występuje test interfejsu użytkownika, w którym muszę przetestować funkcję asynchroniczną przy użyciu interfejsu API waitForExpectations.Naruszenie interfejsu API podczas korzystania z waitForExpectations

Dostaję taki błąd:

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

I naprawdę nie rozumiem, jak mam poprawnie stworzył oczekiwania.

Pojawia się również błąd w dokumentacji: zgodnie z dokumentacją API to expectation(description:), ale kompilator tego nie zaakceptuje, ale zamiast tego muszę użyć XCTestExpectation(), aby go utworzyć.

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

Jaki błąd zrobić, gdy używasz 'self.expectation (opis:)'? Ponieważ byłby to właściwy sposób, aby to zrobić, w przeciwnym razie twoja klasa testowa nie wie, że stworzyłeś swoje oczekiwania. – Losiowaty

+0

Jeśli spróbuję utworzyć oczekiwanie z parametrem opisu (niech exp1 = XCTestExpectation (opis: "ss2")), otrzymuję "Argument przekazany do wywołania, który nie przyjmuje argumentów" – onthemoon

Odpowiedz

8

OK, twoim błędem jest to, że próbujesz bezpośrednio utworzyć instancję oczekiwania. Docs wyraźnie powiedzieć

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

Oznacza to, że należy utworzyć oczekiwania jak to:

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

Można również nazwać API 'wait (na oczekiwanie : [XCTestExpectation], timeout seconds: TimeInterval) 'i przekazuj oczekiwania, jeśli pochodzą one z pewnej testowej klasy pośredniej. –

Powiązane problemy