如何对大多数视图使用 Firebase 身份验证的 Swift 应用程序进行单元测试?

Posted

技术标签:

【中文标题】如何对大多数视图使用 Firebase 身份验证的 Swift 应用程序进行单元测试?【英文标题】:How can I unit test my Swift application that uses Firebase Authentication for most views? 【发布时间】:2018-04-18 16:24:16 【问题描述】:

我使用 Firebase 在 Swift 中构建了一个应用程序,其中大部分功能只有在用户登录后才能访问。例如,我有一个预算页面,可以从数据库中获取事件预算,但这只能完成一次用户已登录。

有人能建议我如何测试需要调用数据库的功能吗?我原以为我需要在我的测试类中登录一个用户,然后使用这些详细信息来测试我的控制器,但每次它都返回 nil?我什至尝试在我的测试类中运行我的登录视图控制器来验证用户身份,但这也不起作用。

谢谢!

【问题讨论】:

【参考方案1】:

对于单元测试,最好消除所有外部依赖项。我更喜欢这样做的一种方法,尤其是对于任何类型的网络或数据库,是创建一个 Mock 对象并将模拟对象注入其中,而不是使用实际的网络模块或数据库。这将涉及依赖注入的一些重构,并将您的 Firebase 管理器抽象为可以模拟的协议。 使用 MockFirebase,您无需使用网络或访问实际数据库即可获得所有“身份验证”。

如果您的 Firebase 管理器设置为 Singleton,那么用于制作它的 Mock 的好资源是:

https://medium.com/@johnsundell/testing-swift-code-that-uses-system-singletons-in-3-easy-steps-89f4884cd325

有关模拟的一般信息,这里是另一个链接:

https://www.swiftbysundell.com/posts/mocking-in-swift

【讨论】:

以上是关于如何对大多数视图使用 Firebase 身份验证的 Swift 应用程序进行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Firebase 身份验证中实现多用户帐户登录和切换?

成功登录后 SwiftUI Firebase 身份验证关闭视图

如何在 MVVM-C RxSwift 中实现 firebase 身份验证

如何针对 Firebase 验证身份验证令牌?

处理 SwiftUI 组合应用程序中的 Firebase 身份验证错误

如何使用 Firebase 刷新令牌保持用户身份验证?