【问题标题】:How to write Unit Test for UserDefaults如何为 UserDefaults 编写单元测试
【发布时间】:2020-01-22 02:08:59
【问题描述】:

我有 2 个函数,其中一个基本上检索用户默认值中的字符串,另一个将字符串写入用户默认值中。我无法理解是否应该进行单元测试?而且我对单元测试的概念还很陌生。

我在互联网上搜索测试用户默认值,但最后我被建议模拟测试。

我的问题是如果有办法测试用户默认值,那么最好的方法是什么?

常量和结构

let defaults = UserDefaults.standard
let defaultinformation = "ABCDEFG"

struct Keys {
    static let Information = "Information"
}

保存信息的功能

func SetDefaultInformation() {
    defaults.set(defaultinformation, forKey: Keys.Information)

}

检索信息的函数

func checkForInformation() -> String {
    let Information = defaults.value(forKey: Keys.Information) as? String ?? ""
    return Information
}

提前致谢

【问题讨论】:

标签: swift nsuserdefaults xctest swift5 userdefaults


【解决方案1】:

我应该做单元测试还是不做

没有。你知道什么 UserDefaults 做了什么并且你知道如何它工作和那个它工作。测试苹果的代码是荒谬的。测试defaults.set 一样愚蠢;您确切地知道它的作用,并且您知道它会做到。

您要测试的是您的代码:不是您从 UserDefaults 本身检索,而是您对该检索的响应。给自己一些方法,这样你就可以看到当information 是字符串时 做了什么,以及当informationnil 做了什么。正如您所知道的,一个简单的模拟可以提供后端,扮演 UserDefaults 的角色并返回不同类型的结果。只是不要让您的测试涉及 real UserDefaults。

【讨论】:

  • 嘿@matt 我需要对这些函数进行单元测试,基本上添加随机字符串并保存并检查是否保存。我知道这不是必需的,测试苹果给定的功能是没有意义的,除了模拟测试之外,还有其他方法可以测试。我对测试真的很陌生。如果您能对此有所了解,那就太好了。谢谢。
  • 当然,你明白什么是模拟吗?例如,您可以创建您的类和 UserDefaults 都符合的协议,这需要 set(_:forKey:)value(forKey:)。现在,您的测试很容易插入您的类而不是 UserDefaults。正如我在回答中所说,“一个简单的模拟可以提供后端”。
  • 不,我不懂模拟。我无法绕过它。感谢到目前为止的帮助。谢谢
  • 这是一个很好的开始:developer.apple.com/videos/play/wwdc2018/417
猜你喜欢
  • 2018-01-17
  • 2012-01-06
  • 2019-03-17
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多