我正在编写环绕OktaAuthSDK
的iOS服务。
我想编写测试以确保当我调用服务时,我的方法在SDK上调用正确的类方法。
由于SDK本质上是单例,因此我的常规方法如下:
在大多数情况下,这对我来说效果很好,但是OktaAuthSDK很难模拟。
他们的SDK示例:
public class OktaAuthSdk {
public class func authenticate(with url: URL,
username: String,
password: String?,
onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
onError: @escaping (_ error: OktaError) -> Void) {
let unauthenticatedStatus = OktaAuthStatusUnauthenticated(oktaDomain: url)
unauthenticatedStatus.authenticate(username: username,
password: password ?? "",
onStatusChange:onStatusChange,
onError:onError)
}
.......
我的协议可以简化测试:
import OktaAuthSdk
protocol OktaAuthSdkType: class {
static func authenticate(with url: URL, username: String, password: String?, onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void, onError: @escaping (_ error: OktaError) -> Void)
static func recoverPassword(with url: URL, username: String, factorType: OktaRecoveryFactors, onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void, onError: @escaping (_ error: OktaError) -> Void)
}
extension OktaAuthSdk: OktaAuthSdkType { }
如您所见,这仅是现有方法的镜像,这使我以后可以将SDK存根。
我的初始服务:
import Foundation
import OktaAuthSdk
public class OAuthService: OAuthServiceType {
var oktaAuthSDK: OktaAuthSdkType = OktaAuthSdk.self
}
这会产生错误
“ OktaAuthSdk.Type”类型的值不符合指定的类型 'OktaAuthSdkType'
如果我删除.self
,则会遇到相同的错误。
由于初始化程序也是私有的,因此我也无法创建SDK的实例。