在 swift Xctest 中测试 Firebase 类

Posted

技术标签:

【中文标题】在 swift Xctest 中测试 Firebase 类【英文标题】:Testing Firebase Classes in swift Xctest 【发布时间】:2017-03-03 20:40:59 【问题描述】:

我正在使用 firebase 组合一个应用程序,我想确保我可以在它上面运行测试。没有很多关于它的文档——所以我想看看我是否以正确的方式做这件事——或者我做的是否完全错误。

此解决方案的一些不妥之处: 1. 每次我启动一个新的测试类时,我都在运行 FirApp.configure - 没有办法可以共享吗?例如,类似于 AppDelegate 在应用程序上的操作方式。目前这似乎是冲突的,所以测试没有向数据库写入任何内容。 2.每次上新课时我都必须进行身份验证-这可以共享吗? (即在 Pre-Setup 设置文件中?)

import XCTest
import Firebase

@testable import BurgerRestaurant
class BurgerTests: XCTestCase 
    var sut:Burger!

    override func setUp() 
        super.setUp()
        FIRApp.configure()
        self.sut = Constants.MockedObjects.testBurger


    

    override func tearDown() 
        sut = nil
        super.tearDown()
    

    func testSave() 
        if TestSettings.useRealFBaseCalls 
            let testSave = self.expectation(description: "Saving Burger Object")
            FIRAuth.auth()?.signIn(withEmail: TestSettings.testFireBUser, password: TestSettings.testFireBPass, completion:  (user, error) in


                self.sut.save(completion:  
                    testSave.fulfill()
                )

            )
        
    self.waitForExpectations(timeout: 15, handler: nil)
    

欢迎提出关于如何进行测试的想法。

谢谢

【问题讨论】:

【参考方案1】:

(我的观点是)你真的不应该测试 Firebase 是否做了它应该做的事情,你应该只是测试 YOUR 代码是否做了它应该做的事情。 Firebase 应该有自己的测试。我会为 Firebase 设置一个模拟并将其提供给您的测试用例,并确保您的代码进行应有的调用。 GitHub 上有几个 Firebase 测试模拟。 (我没有使用过 Firebase,所以我无法证明它们有多好,或者它们是否能满足您的需求,只是我能够快速找到的一些):

https://github.com/katowulf/mockfirebase

https://github.com/soumak77/firebase-mock

【讨论】:

同意你的观点,乔丹-感谢分享-。我将尝试这些并在此处发布结果

以上是关于在 swift Xctest 中测试 Firebase 类的主要内容,如果未能解决你的问题,请参考以下文章

XCTest 中的 Swift 模拟类

Swift:XCTest 会修改状态吗?可以返回可选值的测试函数的约定是啥?

Swift XCTest 命名空间错误?

使用 Realm 进行 Swift XCTest UI 测试

无法在 Swift 中从 XCTest 打开 NSStream

XCTest |词法或预处理器问题:未找到 MyProject-Swift.h