我编写了一个测试来验证函数是否被调用:
func test_getTaskLists_doNotCreateOrUpdateTaskListToStorageWhenSynchedLocally() {
...
let (datasource, restAPI, fakeTaskListStorage) = ...
datasource.getTaskLists() { (taskLists, error) -> Void in
...
XCTAssertEqual(1, fakeTaskListStorage.readAllInvocationCount)
...
}
...
}
该函数被模拟以绕过超级实现,问题是该函数返回一个结果,我无法弄清楚构建/模拟以返回有效对象,因此编译器停止抱怨...我我知道我可以调用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...
}
}
答案 0 :(得分:3)
无法直接实例化Results
。子类Results
也不允许。我认为最好的方法是通过Results
之类的协议隐藏ResultsWrapper
,而不是直接使用Results
。
但是一个简单的解决方法是在测试时使用内存中的Realm。
可以使用内存Realm编写FakeTaskListsStorageRealm
readAll()
,如下所示:
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)
}
}