用于单元测试的 UserDefaults 实例?

Posted

技术标签:

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

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

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

【问题讨论】:

UserDefaults(suiteName: ) 是我要找的那个吗? 【参考方案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")

【讨论】:

以上是关于用于单元测试的 UserDefaults 实例?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 UserDefaults 编写单元测试

服务定位器模式下的单元测试

单元测试实战(四种覆盖详解测试实例)

是否可以在进程中启动 Zookeeper 服务器实例,例如用于单元测试?

无法在颤动中模拟单例类

将 DateComponents 数组设置为 UserDefaults 不起作用