【发布时间】:2011-09-05 19:42:33
【问题描述】:
我看了问题Easy way to see saved NSUserDefaults?
我找到了应用程序的 .plist 文件,但测试包的文件在哪里?
【问题讨论】:
标签: nsuserdefaults ocunit sentestingkit
我看了问题Easy way to see saved NSUserDefaults?
我找到了应用程序的 .plist 文件,但测试包的文件在哪里?
【问题讨论】:
标签: nsuserdefaults ocunit sentestingkit
如果您使用 Xcode 4 与 OCUnit 的集成,它会将测试包注入到正在运行的应用程序中。因此 NSUserDefaults 保存在应用程序本身中。这对于单元测试来说是有问题的:当您手动运行应用程序时,您的默认设置可能已被您的测试覆盖。
不要直接使用[NSUserDefaults standardUserDefaults],而是使用依赖注入,将用户默认值作为初始化参数传入。然后你可以传入一个你可以查询的测试替身。 (依赖注入的替代方法是从辅助方法返回 NSUserDefaults,覆盖该方法以在必要时返回测试替身。)
【讨论】:
NSUserDefaults 没有存储到应用程序的 .plist 文件中,NSUserDefaults 通常存储在该文件中。实际上,我根本没有看到它们被存储。虽然,我可能会遗漏一些东西。
在我的环境中(Xcode 4.2,在模拟器中运行测试)NSUserDefaults 写入以下文件:
~/Library/Application Support/iPhone Simulator/Library/Preferences/otest.plist`
我猜您没有看到该文件是因为 NSUserDefaults 的缓存机制(在类参考中进行了解释),并且因为您的项目的单元测试运行时间不够长,以至于缓存时间间隔结束。
otest.plist 保证会被写入,但是,如果在测试运行时调用 NSUserDefault 实例方法 synchronize。
【讨论】:
OCUnit 似乎不会永久存储NSUserDefaults,而是存储在内存中。但是,我可能是错的。
【讨论】: