iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了xcode – NSUserDefault不应该是单元测试的干净的slate?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我正在写我的第一个iOS单元测试(Xcode 5,iOS 6),发现单元测试的结果取决于我最近在模拟器中做了什么。例如。我点击模拟器中联系人列表中的用户,现在我的UserDefaults中的“最近的联系人”数据还有一个以上的对象,即使我正在运行单元测试。 对于单元测试,具有随机用户默认数据(我习惯用自己的干净db进行RoR测试)并不干净。此外,我可能想要测试具体的状态,如空的“最近的联系人”数据。
我正在写我的第一个iOS单元测试(Xcode 5,iOS 6),发现单元测试的结果取决于我最近在模拟器中做了什么。例如。我点击模拟器中联系人列表中的用户,现在我的UserDefaults中的“最近的联系人”数据还有一个以上的对象,即使我正在运行单元测试。

对于单元测试,具有随机用户认数据(我习惯用自己的干净db进行RoR测试)并不干净。此外,我可能想要测试具体的状态,如空的“最近的联系人”数据。

从这里看相关问题,我似乎有一些可能的答案,我不高兴。

> mock UserDefaults进行单元测试!我必须修改许多现有的类,以便我可以注入这个模拟。@H_404_14@>在setUp方法中清除或自定义UserDefaults!但是,随之而来的我在手动测试中花费的数据将会消失。@H_404_14@>在setUp方法中清除或自定义UserDefaults,然后在tearDown中恢复这些值!哎哟。

对于在单元测试中应该是标准做法的东西,这些似乎不必要地复杂化。我不想在每个单元测试中重复一遍。所以我的问题是:

>我是否忘记了用户认从ad-hoc模拟器测试到单元测试运行的方式?@H_404_14@>有没有可配置的方法解决这个问题,有一些方法可以设置单元测试目标,以便在使用模拟器手动测试时,为UserDefaults设置不同的存储位置?@H_404_14@>没有,在代码中有没有一个优雅的方式来做到这一点?@H_404_14@>例如,我可以有一个从XCTESTCase继承的MyAppTESTCase对象,并覆盖setUp和tearDown方法,以便始终将其放在一边,然后还原UserDefaults。这是一个好主意吗?

解决方法

使用命名套房 like in this answer对我来说很好。删除用于测试的用户认值也可以在func tearDown()中完成。

class myTest : XCTESTCase {
    var userDefaults: UserDefaults?
    let userDefaultsSuitename = "TestDefaults"

    override func setUp() {
        super.setUp()
        UserDefaults().removePersistentDomain(forName: userDefaultsSuiteName)
        userDefaults = UserDefaults(suitename: userDefaultsSuiteName)
    }
}

大佬总结

以上是大佬教程为你收集整理的xcode – NSUserDefault不应该是单元测试的干净的slate?全部内容,希望文章能够帮你解决xcode – NSUserDefault不应该是单元测试的干净的slate?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。