加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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.
可以使用内存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)
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读