最佳答案
我正在用 Xcode 6编写集成测试,以配合我的单元测试和功能测试。XCTest 有一个在每次测试之前调用的 setUp ()方法。太好了!
它还有 XCTestException,可以让我编写异步测试!
但是,我希望在每个测试之前用测试数据填充我的测试数据库,而 setUp 只是在完成异步数据库调用之前开始执行测试。
有没有办法让 setUp 等到我的数据库准备好后再运行测试?
这是我现在要做的一个例子。因为 setUp 在数据库填充完成之前返回,所以我必须在每个测试中复制大量的测试代码:
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)
}
}
}
这是我想要的:
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)
}
}
}
}