xcode – NSUserDefault不应该是单元测试的干净的slate?

xcode – NSUserDefault不应该是单元测试的干净的slate?,第1张

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

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

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

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

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

>我是否忘记了用户默认从ad-hoc模拟器测试到单元测试运行的方式?
>有没有可配置的方法来解决这个问题,有一些方法可以设置单元测试目标,以便在使用模拟器手动测试时,为UserDefaults设置不同的存储位置?
>没有,在代码中有没有一个优雅的方式来做到这一点?
>例如,我可以有一个从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?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1071513.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存