菜鸟教程小白 发表于 2022-12-11 19:54:52

ios - 如何测试 Firebase DataSnapshot 以对对象解析进行建模?


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

<pre><code>struct Foo {
var ref: DatabaseReference?
var foo: String

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

    self.ref = nil // for testing purposes
    self.foo = foo
}
</code></pre>

<p>如何获取包含一些虚拟数据的快照?看来我无法<em>制作</em> <code>DataSnapshot</code> 并手动设置值:</p>

<blockquote>
<p>DataSnapshots are passed to the methods in listeners [...] They can&#39;t be modified and will never change.</p>
</blockquote>

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

<p>那么我该如何测试呢?我想我可以将我的模型初始化更改为 <code>init?(dictionary: , ref: DatabaseReference)</code>,而不仅仅是 <code>DataSnapshot</code>,但这似乎有点哈基。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>目前有超过 200 次观看,因此请为其他人澄清。重构您的方法以传递字典,然后分别测试这两种方法。</p>

<pre><code>struct Foo {
var foo :String

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

self.init(dict: dictionary)
}

init?(dict: {
guard let foo = dict[&#34;foo&#34;] as? String else { return nil }

self.init(foo: foo)
}

}
</code></pre>

<p>然后对这两种方法进行单元测试,例如:</p>

<pre><code>func testInitDataSnapshot() {
    let snapshot = DataSnapshot()

    let dut = Foo(snapshot: snapshot)

    expect(dut).to(beNil())

}

func testInitDictionary() {
    let dict = [&#34;foo&#34; : &#34;bar&#34;]

    let dut = Foo(dict: dict)

    expect(dut).toNot(beNil())
    expect(dut.foo)to(equal(&#34;bar&#34;))
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何测试 Firebase DataSnapshot 以对对象解析进行建模?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/44679747/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/44679747/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何测试 Firebase DataSnapshot 以对对象解析进行建模?