Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.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
Ios 如何测试Firebase DataSnapshot到模型对象解析?_Ios_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

Ios 如何测试Firebase DataSnapshot到模型对象解析?

Ios 如何测试Firebase DataSnapshot到模型对象解析?,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我正在尝试将FirebaseDataSnapshot对象解析为模型对象。 假设我有这个模型: struct Foo { var ref: DatabaseReference? var foo: String init?(snapshot: DataSnapshot) { guard let snapValue = snapshot.value as? [String: Any], let foo = snapValue["foo"] as? Str

我正在尝试将Firebase
DataSnapshot
对象解析为模型对象。 假设我有这个模型:

struct Foo {
  var ref: DatabaseReference?
  var foo: String

  init?(snapshot: DataSnapshot) {
    guard 
      let snapValue = snapshot.value as? [String: Any],
      let foo = snapValue["foo"] as? String
      else { return nil }

    self.ref = nil // for testing purposes
    self.foo = foo
}
如何使用一些虚拟数据获取快照?似乎我无法制作
DataSnapshot
并手动设置值:

DataSnapshot被传递给侦听器中的方法[…],它们不能被修改,也永远不会更改

我也不认为我可以直接初始化一个
数据库引用
,然后手动设置值——结果是空的


那么我如何测试这个呢?我想我可能可以将我的模型init更改为
init?(dictionary:[String:Any],ref:DatabaseReference)
,而不仅仅是
DataSnapshot
,但这似乎有点老套

目前有200多个视图,为其他人澄清了这一点。重构方法以通过字典,然后分别测试这两个方法

struct Foo {
 var foo :String

 init?(snapshot: DataSnapshot) {
  guard let dictionary = snapshot.value as? [String: Any] 
  else { return nil }

  self.init(dict: dictionary)
 }

 init?(dict: [String:Any] {
  guard let foo = dict["foo"] as? String else { return nil }

  self.init(foo: foo)
 }

}
然后对两种方法进行单元测试,例如:

func testInitDataSnapshot() {
    let snapshot = DataSnapshot()

    let dut = Foo(snapshot: snapshot)

    expect(dut).to(beNil())

}

func testInitDictionary() {
    let dict = ["foo" : "bar"]

    let dut = Foo(dict: dict)

    expect(dut).toNot(beNil())
    expect(dut.foo)to(equal("bar"))
}