用于单元测试的 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")