我正在编写我的第一个iOS单元测试(Xcode 5,iOS 6),并发现单元测试的结果取决于我最近在模拟器中所做的事情.例如,我点击模拟器中联系人列表中的用户,现在我在UserDefaults中的"最近联系人"数据还有一个比以前更多的对象,即使我正在运行单元测试.
对于单元测试,使用随机用户默认数据并不干净(我习惯使用自己的干净数据库进行RoR测试).此外,我可能想测试特定的状态,比如拥有空的"最近的联系人"数据.
从这里查看相关问题,我似乎有些可能的答案,我不满意.
- 模拟UserDefaults进行单元测试!我将不得不修改许多现有的类,以便我可以注入该模拟.
- 在setUp方法中清除或自定义UserDefaults!但是,我在手动测试中费力地创建的数据将会消失.
- 在setUp方法中清除或自定义UserDefaults 然后在tearDown中恢复这些值!哎哟.
对于在单元测试中应该是标准做法的东西,这些似乎不必要地复杂化.我不想在每个单元测试中重复自己.所以,我的问题是:
- 我是否遗漏了从Ad-hoc模拟器测试到单元测试运行的UserDefaults持久化方式?
- 是否有一种可配置的方法来解决这个问题,比如设置单元测试目标以便为UserDefaults设置不同的存储位置比使用模拟器手动测试时的某种方式?
- 如果失败了,在代码中有一种优雅的方法吗?
- 例如,我可以从XCTestCase继承MyAppTestCase对象并覆盖setUp和tearDown方法以始终保留然后恢复UserDefaults.这是一个好主意吗?