Wie kann ich XCTest dazu bringen, auf asynchrone Aufrufe in setUp zu warten, bevor Tests ausgeführt werden?

Ich Schreibe, integration tests in Xcode 6 zu gehen zusammen mit meinem unit-und funktionale tests. XCTest hat eine setUp () - Methode aufgerufen wird, vor jedem test. Super!!!

Es hat auch XCTestException, die lassen mich schreiben asynchronen tests. Ebenfalls Super!

Allerdings möchte ich zum Auffüllen meiner test-Datenbank mit test-Daten vor jedem test und setUp, nur mit der Ausführung der tests, bevor die asynchrone Datenbank-Aufruf erfolgt ist.

Ist es ein Weg, um setUp zu warten, bis meine Datenbank fertig ist, bevor es führt tests?

Hier ist ein Beispiel, was ich jetzt tun soll. Seit dem setUp zurück, bevor die Datenbank erfolgt das Auffüllen habe ich so duplizieren Sie eine Menge von test-code bei jedem test:

func test_checkSomethingExists() {

    let expectation = expectationWithDescription("")
    var expected:DatabaseItem

    //Fill out a database with data. 
    var data = getData()
    overwriteDatabase(data, {
      //Database populated.
      //Do test... in this pseudocode I just check something...
      db.retrieveDatabaseItem({ expected in

        XCTAssertNotNil(expected)

        expectation.fulfill()
      })
    })

    waitForExpectationsWithTimeout(5.0) { (error) in
        if error != nil {
            XCTFail(error.localizedDescription)
        }
    }

}

Hier ist, was ich möchte:

class MyTestCase: XCTestCase {

    override func setUp() {
        super.setUp()

        //Fill out a database with data. I can make this call do anything, here
        //it returns a block.
        var data = getData()
        db.overwriteDatabase(data, onDone: () -> () {

           //When database done, do something that causes setUp to end 
           //and start running tests

        })        
    }

    func test_checkSomethingExists() {

        let expectation = expectationWithDescription("")
        var expected:DatabaseItem


          //Do test... in this pseudocode I just check something...
          db.retrieveDatabaseItem({ expected in

            XCTAssertNotNil(expected)

            expectation.fulfill()
        })

        waitForExpectationsWithTimeout(5.0) { (error) in
            if error != nil {
                XCTFail(error.localizedDescription)
            }
        }

    }

}

InformationsquelleAutor der Frage Brett Elliot | 2015-04-08

Schreibe einen Kommentar