Swift CloudKit单元测试查询未执行
我正在尝试为CloudKit编写一个测试,我正在重写我想要测试的方法,并扩展Swift CloudKit单元测试查询未执行,swift,unit-testing,cloudkit,Swift,Unit Testing,Cloudkit,我正在尝试为CloudKit编写一个测试,我正在重写我想要测试的方法,并扩展CKDatabase,以便模拟我的CloudKit数据库,这是我从其他帖子中可以确定的( -谢谢)这是测试CloudKit所必需的 我在测试和尝试学习方面缺乏经验,所以我觉得我可能遗漏了一些更大的东西,打印语句从未打印出来,表明从未执行过闭包。有人能给我指一下正确的方向吗 这是我的简化代码- CloudKitService.swift protocol CKDatabaseProtocol { func per
CKDatabase
,以便模拟我的CloudKit数据库,这是我从其他帖子中可以确定的(
-谢谢)这是测试CloudKit所必需的
我在测试和尝试学习方面缺乏经验,所以我觉得我可能遗漏了一些更大的东西,打印语句从未打印出来,表明从未执行过闭包。有人能给我指一下正确的方向吗
这是我的简化代码- CloudKitService.swift
protocol CKDatabaseProtocol {
func perform(_ query: CKQuery, inZoneWith zoneID: CKRecordZone.ID?, completionHandler: @escaping ([CKRecord]?, Error?) -> Void)
}
extension CKDatabase: CKDatabaseProtocol { }
斯威夫特云猫酒店
class MockCloudKit: CKDatabaseProtocol {
private let container: CKContainer
fileprivate var database: CKDatabase {
return self.container.publicCloudDatabase
}
init(container: CKContainer) {
self.container = container
}
func perform(_ query: CKQuery, inZoneWith zoneID: CKRecordZone.ID?, completionHandler: @escaping ([CKRecord]?, Error?) -> Void) {
self.database.perform(query, inZoneWith: zoneID, completionHandler: completionHandler)
}
func getData(dataFetched: @escaping([CKRecord]) -> (Void)) {
let predicate = NSPredicate(value: true)
let publicQuery = CKQuery(recordType: "MyRecord", predicate: predicate)
publicQuery.sortDescriptors = [NSSortDescriptor(key: "id", ascending: true)]
perform(publicQuery, inZoneWith: .default) { results, error in
dataFetched([CKRecord]())
// no execution here
print("This is never printed")
...
}
}
}
class CloudKitTest: XCTestCase {
func myTest() {
var record = [CKRecord]()
let container = CKContainer.default()
let mockContainer = MockCloudKit(container: container)
mockContainer.getData( dataFetched: { results in
// no execution here
print("This is never printed")
....
}
}
}