Swift CloudKit单元测试查询未执行

Swift CloudKit单元测试查询未执行,swift,unit-testing,cloudkit,Swift,Unit Testing,Cloudkit,我正在尝试为CloudKit编写一个测试,我正在重写我想要测试的方法,并扩展CKDatabase,以便模拟我的CloudKit数据库,这是我从其他帖子中可以确定的( -谢谢)这是测试CloudKit所必需的 我在测试和尝试学习方面缺乏经验,所以我觉得我可能遗漏了一些更大的东西,打印语句从未打印出来,表明从未执行过闭包。有人能给我指一下正确的方向吗 这是我的简化代码- CloudKitService.swift protocol CKDatabaseProtocol { func per

我正在尝试为CloudKit编写一个测试,我正在重写我想要测试的方法,并扩展
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")
             ....
        }
    }
}