【问题标题】:UserDefaults instance for unit testing?用于单元测试的 UserDefaults 实例?
【发布时间】:2020-12-08 00:20:39
【问题描述】:

我有一个要测试的课程。它在其逻辑中使用 UserDefaults。 我知道我必须注入一个测试替身来测试它,但我想不费力气就能做到。

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

【问题讨论】:

  • UserDefaults(suiteName: ) 是我要找的那个吗?

标签: swift unit-testing nsuserdefaults userdefaults


【解决方案1】:

是的,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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2021-09-08
    • 1970-01-01
    相关资源
    最近更新 更多