OGeek|极客世界-中国程序员成长平台

标题: ios - 如何测试 Firebase DataSnapshot 以对对象解析进行建模? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 19:54
标题: ios - 如何测试 Firebase DataSnapshot 以对对象解析进行建模?

我正在尝试将 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 并手动设置值:

DataSnapshots are passed to the methods in listeners [...] They can't be modified and will never change.

我也不认为我可以只初始化一个 DatabaseReference 并手动设置值 - 它只是空的。

那么我该如何测试呢?我想我可以将我的模型初始化更改为 init?(dictionary: [String: Any], ref: DatabaseReference),而不仅仅是 DataSnapshot,但这似乎有点哈基。



Best Answer-推荐答案


目前有超过 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"))
}

关于ios - 如何测试 Firebase DataSnapshot 以对对象解析进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44679747/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4