我使用Firebase在我的应用程序中管理身份验证。对于已登录的用户,它具有一个单例对象:Auth.auth().currentUser
在我的代码的一部分中,我检查了登录用户的uid
是否等于与对象关联的userId
。
我需要测试使用此检查的代码。为此,我需要能够注入模拟Firebase Auth对象。
如何模拟Firebase Auth对象?以前有没有人有经验?
答案 0 :(得分:1)
因此,我通过创建一些身份验证协议并使User
符合该协议来解决了这个问题:
protocol AuthUser {
var uid: String {get}
var displayName: String? {get}
var email: String? {get}
var photoURL: URL? {get}
}
extension User : AuthUser {}
protocol AuthenticationProtocol {
var currentUser: AuthUser? {get}
}
然后我创建了一个符合Authentication
的{{1}}类:
AuthenticationProtocol
当我的应用中有一个需要身份验证的类时,我将注入一个符合final class Authentication: AuthenticationProtocol {
static let shared = Authentication()
private let auth = Auth.auth()
var currentUser: AuthUser? {
return auth.currentUser
}
的类,如下所示:
AuthenticationProtocol
然后我可以通过调用final class MyClass {
private let auth: AuthenticationProtocol
init(auth: AuthenticationProtocol = Authentication.shared) {
self.auth = auth
}
来获取当前登录用户的ID。
对于测试,我然后创建一个符合auth.currentUser?.uid
的模拟类,如下所示:
AuthenticationProtocol
然后我可以在致电final class AuthenticationMock : AuthenticationProtocol {
private let uid: String
let currentUser: AuthUser?
init(currentUser: AuthUser) {
self.currentUser = currentUser
}
}