Guj*_*min 5 xcode nsuserdefaults ios xctest swift3
我试图做的很好,为类编写单元测试,但是我有一些类处理首选项并检查首次运行。我编写的测试函数在第一次运行时可以正常工作,但是由于首选项已经具有值,因此后续测试失败。设置对象nil的结果Optional<Any>值不等于nil当牵强UserDefaults.standard.object(forKey:)。
我也曾尝试UserDefaults.standard.removeObject(forKey:)和UserDefaults.standard.synchronize()和UserDefaults.resetStandardUserDefaults()。似乎没有任何作用,Bundle.main.bundleIdentifier价值就是nil我不能使用UserDefaults.standard.removePersistentDomain(forName:)!
我已经发现了首被保存在:/Users/<name>/Library/Developer/CoreSimulator/Devices/<UUID>/data/Library/Preferences/xctest.plist我已经使用字符串试图"xctest"在removePersistentDomain和太不起作用。
我可以将该值设置为其他值和核对,但我真的很讨厌的垃圾我的代码来测试永远只存在于XCTest的情况(我已经有一个专用于因为这样做复位功能UserDefaults中(XCTest用例UserDefaults与代码中的用例不同!),那么究竟如何在UserDefaultsXCTestCase中重置标准?
小智 0
没有具体的例子,很难解决你的问题,但这对我有用。
当我在类中需要 UserDefaults 时,我定义类初始值设定项来获取 UserDefaults 实例,如下所示:
class Foo {
private let userDefaults: UserDefaults
init(userDefaults: UserDefaults = .standard) {
self.userDefaults = userDefaults
}
}
Run Code Online (Sandbox Code Playgroud)
然后我可以注入一个一次性的 UserDefaults 实例进行测试,如下所示:
class FooTests: XCTestCase {
let userDefaultsSuiteName = "FooTests"
var userDefaults: UserDefaults!
var foo: Foo!
override func setUpWithError() throws {
userDefaults = UserDefaults(suiteName: userDefaultsSuiteName)
foo = Foo(userDefaults: userDefaults)
}
override func tearDownWithError() throws {
userDefaults.removePersistentDomain(forName: userDefaultsSuiteName)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |