用于单元测试的 UserDefaults 实例?
UserDefaults instance for unit testing?
我有一个 class 想要测试。它在其逻辑中使用 UserDefaults。
我知道我必须注入一个测试替身来测试它,但我想毫不费力地完成它。
如果可以制作一个仅在单元测试期间有效的临时UserDefaults实例,那将是最好的。还是我最终必须为模拟编写一个包装器?
是的,UserDefaults(suiteName: )
就是您要找的。您可以像这样在测试中声明它:
private class MockUserDefaults : UserDefaults {
convenience init() {
self.init(suiteName: "MockUserDefaults")!
}
override init?(suiteName suitename: String?) {
UserDefaults().removePersistentDomain(forName: suitename!)
super.init(suiteName: suitename)
}
}
删除持久域有助于避免与之前的一些测试运行的数据发生冲突。
然后照常使用:
MockUserDefaults.standard.setValue("Whatever", forKey: "SomeKey")
我有一个 class 想要测试。它在其逻辑中使用 UserDefaults。 我知道我必须注入一个测试替身来测试它,但我想毫不费力地完成它。
如果可以制作一个仅在单元测试期间有效的临时UserDefaults实例,那将是最好的。还是我最终必须为模拟编写一个包装器?
是的,UserDefaults(suiteName: )
就是您要找的。您可以像这样在测试中声明它:
private class MockUserDefaults : UserDefaults {
convenience init() {
self.init(suiteName: "MockUserDefaults")!
}
override init?(suiteName suitename: String?) {
UserDefaults().removePersistentDomain(forName: suitename!)
super.init(suiteName: suitename)
}
}
删除持久域有助于避免与之前的一些测试运行的数据发生冲突。
然后照常使用:
MockUserDefaults.standard.setValue("Whatever", forKey: "SomeKey")