gpt4 book ai didi

swift - 如何为测试伪造 Realm 结果

转载 作者:搜寻专家 更新时间:2023-10-30 23:15:03 25 4
gpt4 key购买 nike

我已经编写了一个测试来验证函数是否被调用:

  func test_getTaskLists_doNotCreateOrUpdateTaskListToStorageWhenSynchedLocally() {

...
let (datasource, restAPI, fakeTaskListStorage) = ...

datasource.getTaskLists() { (taskLists, error) -> Void in
...
XCTAssertEqual(1, fakeTaskListStorage.readAllInvocationCount)
...
}
...
}

该函数被模拟以绕过 super 实现,问题是该函数返回一个结果,我无法弄清楚要构建/模拟以返回一个有效对象,因此编译器停止提示......我知道我可以只调用 super.readAll() 但在这里我实际上想将我的测试数据 (fakeTaskLists) 转换为一个假的 Result 对象所以每个人都很高兴......不确定这是否可能

class FakeTaskListsStorageRealm : TaskListStorageRealm {
var fakeTaskLists:[TaskList]?
override func readAll() -> RealmSwift.Results<TaskList> {
readAllInvocationCount += 1
//Here I want to return fakeTaskLists somehow...
}
}

最佳答案

无法直接实例化Results。子类化 Results 也不允许。我认为最好的方法是通过 ResultsWrapper 之类的协议(protocol)隐藏 Results 而不是直接使用 Results

但一个简单的解决方法是在测试时使用内存中的 Realm。FakeTaskListsStorageRealmreadAll() 可以使用内存中的 Realm 编写,如下所示:

class FakeTaskListsStorageRealm : TaskListStorageRealm {
var fakeTaskLists:[TaskList]?
override func readAll() -> RealmSwift.Results<TaskList> {
readAllInvocationCount += 1
return try! Realm(configuration: Realm.Configuration(inMemoryIdentifier: "test")).objects(TaskList.self)
}
}

关于swift - 如何为测试伪造 Realm 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38902475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com