Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为了测试从Firestore提取的Swift应用程序,如何模拟QuerySnapshot?_Swift_Firebase_Google Cloud Firestore - Fatal编程技术网

为了测试从Firestore提取的Swift应用程序,如何模拟QuerySnapshot?

为了测试从Firestore提取的Swift应用程序,如何模拟QuerySnapshot?,swift,firebase,google-cloud-firestore,Swift,Firebase,Google Cloud Firestore,我有一个签名为func getItem(querySnapshot:querySnapshot)的swift函数,我不知道如何模拟querySnapshot 是一个我不太熟悉的.h文件。从阅读中,它似乎只是一个被使用的,而不是实际的实现(如果错误,请更正)。我尝试从这个子类化并使用那个子类,但我甚至不确定在哪里添加测试数据 func getItem(querySnapshot:querySnapshot){ 对于querySnapshot.documents中的文档{ let cost=docu

我有一个签名为
func getItem(querySnapshot:querySnapshot)
的swift函数,我不知道如何模拟querySnapshot

是一个我不太熟悉的.h文件。从阅读中,它似乎只是一个被使用的,而不是实际的实现(如果错误,请更正)。我尝试从这个子类化并使用那个子类,但我甚至不确定在哪里添加测试数据

func getItem(querySnapshot:querySnapshot){
对于querySnapshot.documents中的文档{
let cost=document.get(“成本”);
}
}

我正处于重构的过程中,不太依赖QuerySnapshot,并在调用此方法之前转换为项;这将使我的生活更加轻松。

在处理测试和Firebase时,似乎没有太多优秀的测试基础设施,尤其是单元测试。最好的做法是创建抽象出Firestore的数据对象,在整个代码中使用这些对象(而不是依赖Firestore),并使用这些对象进行测试

一件非常有用的事情是,它可以让您将快照解码并编码为可编码对象。例如,如果创建简单数据对象

class MyDocument: Codable {
  var name: String
  var age: Int
}

然后,您可以使用
FirestoreEncoder().encode
FirestoreDecoder.decode()

为什么?如果您使用的是Firebase,那么QuerySnapshot是一个很好的Firebase数据容器。这里的用例是什么?您想对数据做什么?模拟标准Firebase对象的目的是什么?典型的用例是将数据作为QuerySnapshot读取,然后根据该数据创建自定义类。如果我们有一点更清楚,我们可能会提供一个更准确的答案。e、 g.创建抽象对象可能完全没有必要,实际上会造成更多的复杂性,使应用程序更难管理。Hola。对不起,我忘了提到模拟是用来测试的。现在,我有一些方法可以在QuerySnapshot中接受。我想从这个角度出发,做你提到的事情,使用QuerySnapshot读入数据并从中创建对象。我正在玩@Akiva发布的内容,并将更新。好的。您可能不需要增加编码和解码的开销。我发现在我的类的init方法中传递快照并从快照本身提取数据更容易维护。保持它的干净性和可读性,如果节点没有子节点,我可以直接在init中处理它。如果你想要一个例子,添加你的firebase结构的一个片段,我会把一些东西放在一起。init方法是一个很好的方法。