swift - CloudKit 单元测试查询未执行
问题描述
我正在尝试为 CloudKit 编写测试,我正在覆盖我想测试和扩展的方法,以便模拟我的CloudKitCKDatabase
数据库,从我可以从其他帖子中确定的内容(链接1链接2 - 谢谢)这是必要的测试 CloudKit。
我没有测试和尝试学习的经验,所以我觉得我可能错过了更大的图景,打印语句永远不会打印,表明关闭永远不会执行。有人可以指出我正确的方向吗?
这是我的简化代码-
CloudKitService.swift
protocol CKDatabaseProtocol {
func perform(_ query: CKQuery, inZoneWith zoneID: CKRecordZone.ID?, completionHandler: @escaping ([CKRecord]?, Error?) -> Void)
}
extension CKDatabase: CKDatabaseProtocol { }
CloudKitTests.swift
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")
....
}
}
}
解决方案
推荐阅读
- java - Spring Data JPA:找不到类型的属性(字段名称包含查询方法谓词关键字)
- python - 使用 Pandas 将数据加载到 SQLite3 时,有没有办法返回所有被拒绝的行?
- sqlite - sqlite attach database 命令的默认文件位置
- angular - bootstrap5 无法将 undefined 或 null 转换为对象
- json - 在 Azure Synapse 中以 JSON 格式返回 SQL 查询结果
- freeipa - 如果丢失了第一个主服务器,如何在 freeIPA 中提升复制的主服务器?
- woocommerce - 如何从 Woocommerce 中的产品描述内容中去除 HTML?
- dicom - 了解 DICOM 应用程序级机密性配置文件和选项
- node.js - Laravel - “Npm run hot”不起作用并给我这个错误
- node.js - MERN-Stack 电子商务网站的时事通讯功能