微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 如何伪造Realm结果进行测试

我编写了一个测试来验证函数是否被调用
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)
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐