#ios #swift #unit-testing #google-signin
#iOS #swift #модульное тестирование #google-вход
Вопрос:
Я пытаюсь внедрить вход в Google в свой проект. И я создал адаптер интерфейса в качестве шлюза между входом в Google и приложением.
import GoogleSignIn
import RxSwift
class GoogleSignInAdapter: NSObject {
struct SignInDTO {
let idToken: String
let fullName: String
let email: String
}
private(set) lazy var signInSuccessful = signInSuccessfulRelay.asSignal()
private let signInSuccessfulRelay = PublishRelay<SignInDTO>()
private(set) lazy var signInFailed = signInFailedRelay.asSignal()
private let signInFailedRelay = PublishRelay<Error>()
init() {
GIDSignIn.sharedInstance()?.clientID = "******"
GIDSignIn.sharedInstance()?.delegate = self
}
}
extension GoogleSignInAdapter: GIDSignInDelegate {
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
if let error = error {
signInFailedRelay.accept(error)
} else {
let idToken = user.authentication.idToken
let fullName = user.profile.name
let email = user.profile.email
let result = SignInDTO(idToken: idToken, fullName: fullName, email: email)
signInSuccessfulRelay.accept(result)
}
}
func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) {
}
}
У меня все еще возникают проблемы с издевательством и тестированием этого адаптера, чтобы я мог запускать signInSuccessfulRelay
and signInFailedRelay
с их соответствующими параметрами, потому что единственный способ сделать это — запустить сам делегат. Но единственный способ, которым я могу заставить его сработать, — это использовать GIDSignInButton
, который является производным от UIView
. Это означает, что я должен ввести часть представления (которое больше подходит для тестирования пользовательского интерфейса, а не для модульного тестирования) в модульный тест. Кто-нибудь может сказать мне, как сделать тесты для этого класса?