swift – 如何伪造Realm结果进行测试
发布时间:2020-12-14 02:24:01 所属栏目:百科 来源:网络整理
导读:我编写了一个测试来验证函数是否被调用: func test_getTaskLists_doNotCreateOrUpdateTaskListToStorageWhenSynchedLocally() { ... let (datasource,restAPI,fakeTaskListStorage) = ... datasource.getTaskLists() { (taskLists,error) - Void in ... XCT
我编写了一个测试来验证函数是否被调用:
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... } }
无法直接实例化结果.子类化结果也不允许.我认为最好的方法是使用ResultsWrapper等协议隐藏结果,而不是直接使用结果.
但是一个简单的解决方法是在测试时使用内存中的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) } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |