用于单元测试的 UserDefaults 实例?

Tak*_*ura 4 unit-testing nsuserdefaults swift userdefaults

我有一堂课我想测试。它在其逻辑中使用 UserDefaults。我知道我必须注入一个测试替身来测试它,但我想不费太多力气就可以完成它。

如果可以制作一个仅在单元测试期间有效的临时 UserDefaults 实例,那将是最好的。或者我最终必须编写一个用于模拟的包装器?

Pet*_*rev 5

是的,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)
  }
  
}
Run Code Online (Sandbox Code Playgroud)

删除持久域有助于避免与以前的一些测试运行中的数据发生冲突。

然后像往常一样使用它:

MockUserDefaults.standard.setValue("Whatever", forKey: "SomeKey")
Run Code Online (Sandbox Code Playgroud)