Kan*_*e D 6 nsuserdefaults xctest swift userdefaults swift5
我有两个函数,其中一个函数基本上检索用户默认值中的字符串,另一个函数将字符串写入用户默认值中。我不明白我应该进行单元测试还是不进行?我对单元测试的概念还很陌生。
我在互联网上搜索测试用户默认值,但最后建议我模拟测试。
我的问题是,如果有办法测试用户默认值,最好的方法是什么?
常量和结构体
let defaults = UserDefaults.standard
let defaultinformation = "ABCDEFG"
struct Keys {
static let Information = "Information"
}
Run Code Online (Sandbox Code Playgroud)
保存信息的功能
func SetDefaultInformation() {
defaults.set(defaultinformation, forKey: Keys.Information)
}
Run Code Online (Sandbox Code Playgroud)
检索信息的函数
func checkForInformation() -> String {
let Information = defaults.value(forKey: Keys.Information) as? String ?? ""
return Information
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
我应该做单元测试还是不做
不。您知道UserDefaults 的作用,也知道它是如何工作的以及它是如何工作的。测试苹果的代码是荒谬的。测试defaults.set同样愚蠢;你确切地知道它做什么,并且知道它会做什么。
您想要测试的是您的代码:不是您从 UserDefaults 本身进行的检索,而是您对该检索的响应。给自己一些方法,以便您可以看到当 is 是 String 时做什么以及information当is时做什么。正如您所知道的,一个简单的模拟可以提供后端,扮演 UserDefaults 的角色并返回不同类型的结果。只是不要让您的测试涉及真正的UserDefaults。informationnil
小智 6
class ViewModel {
func saveUserName(name: String, userDefaults: UserDefaults = UserDefaults.standard) {
userDefaults.set(name, forKey: "username")
}
}
Run Code Online (Sandbox Code Playgroud)
class MockUserDefault: UserDefaults {
var persistedUserName: String? = nil
var persistenceKey: String? = nil
override func set(_ value: Any?, forKey defaultName: String) {
persistedUserName = value as? String
persistenceKey = defaultName
}
}
func testSavingUserName() {
let viewModel = ViewModel()
let mockUserDefaults = MockUserDefault()
viewModel.saveUserName(name: "Oliver", userDefaults: mockUserDefaults)
XCTAssertEqual("Oliver", mockUserDefaults.persistedUserName)
XCTAssertEqual("username", mockUserDefaults.persistenceKey)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5465 次 |
| 最近记录: |