小编Lis*_*saD的帖子

NSUserDefault不应该是单元测试的清单吗?

我正在编写我的第一个iOS单元测试(Xcode 5,iOS 6),并发现单元测试的结果取决于我最近在模拟器中所做的事情.例如,我点击模拟器中联系人列表中的用户,现在我在UserDefaults中的"最近联系人"数据还有一个比以前更多的对象,即使我正在运行单元测试.

对于单元测试,使用随机用户默认数据并不干净(我习惯使用自己的干净数据库进行RoR测试).此外,我可能想测试特定的状态,比如拥有空的"最近的联系人"数据.

从这里查看相关问题,我似乎有些可能的答案,我不满意.

  • 模拟UserDefaults进行单元测试!我将不得不修改许多现有的类,以便我可以注入该模拟.
  • 在setUp方法中清除或自定义UserDefaults!但是,我在手动测试中费力地创建的数据将会消失.
  • 在setUp方法中清除或自定义UserDefaults 然后在tearDown中恢复这些值!哎哟.

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

  • 我是否遗漏了从Ad-hoc模拟器测试到单元测试运行的UserDefaults持久化方式?
  • 是否有一种可配置的方法来解决这个问题,比如设置单元测试目标以便为UserDefaults设置不同的存储位置比使用模拟器手动测试时的某种方式?
  • 如果失败了,在代码中有一种优雅的方法吗?
  • 例如,我可以从XCTestCase继承MyAppTestCase对象并覆盖setUp和tearDown方法以始终保留然后恢复UserDefaults.这是一个好主意吗?

xcode unit-testing

30
推荐指数
4
解决办法
1万
查看次数

标签 统计

unit-testing ×1

xcode ×1