Rol*_*tte 2 testing swift swiftyuserdefaults
我试图模拟 UserDefaults 以便能够测试其行为。
在不破坏保存用户令牌密钥的实际计算属性的情况下,最好的方法是什么?
class UserDefaultsService {
private struct Keys {
static let token = "partageTokenKey"
}
//MARK: - Save or retrieve the user token
static var token: String? {
get {
return UserDefaults.standard.string(
forKey: Keys.token)
}
set {
UserDefaults.standard.set(
newValue, forKey: Keys.token)
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以子类化UserDefaults
:
(来源)
class MockUserDefaults : UserDefaults {
convenience init() {
self.init(suiteName: "Mock User Defaults")!
}
override init?(suiteName suitename: String?) {
UserDefaults().removePersistentDomain(forName: suitename!)
super.init(suiteName: suitename)
}
}
Run Code Online (Sandbox Code Playgroud)
您可以根据正在运行的目标创建属性,而UserDefaultsService
不是直接访问。UserDefaults.standard
在生产/登台中,您可以拥有UserDefaults.standard
,在测试中,您可以拥有MockUserDefaults
您应该在使用它们之前添加 PREPROCESSOR Flag
#if TESTING
let userDefaults: UserDefaults = UserDefaults.standard
#else
let userDefaults: UserDefaults = MockUserDefaults(suiteName: "testing") ?? UserDefaults.standard
#endif
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2922 次 |
最近记录: |