【发布时间】:2013-04-12 10:31:58
【问题描述】:
我在使用“假”商店进行单元测试时遇到问题。 我通过将其框架文件夹添加到我的项目并用 Kiwi 测试替换 Xcode 的默认测试用例来安装 Kiwi。这些都运行良好。
由于我使用的是 Core Data,我需要创建一个“假”存储,以便我使用真实的数据库。我使用http://www.cimgf.com/2012/05/15/unit-testing-with-core-data/ 作为我的基本指南来执行此操作。
但是,由于 Xcode 的默认测试实现在启动应用程序后运行测试,所以在任何测试运行之前,我的 '[MagicalRecord setupCoreDataStackWithStoreNamed:@"Store.sqlite"]' 仍然会在 App Delegate 内触发。
当测试尝试使用“[MagicalRecord setupCoreDataStackWithInMemoryStore]”时,该 sqlite 存储已设置,因此内存存储未设置(AFAIK),因为上述设置堆栈方法首先检查查看堆栈是否已经存在,如果存在则直接返回而不执行任何操作,所以我最终还是使用了 sqlite 数据库。
据我所知,这给我留下了以下选择:
- 为测试用例放入一些环境变量或标志,并在应用程序委托中检查这些,根据该变量创建适当的存储(即,为了测试而调整我的实际代码 - 不漂亮,也不推荐任何实践的 TDD/BDDers)。
- 在我的所有控制器上添加托管上下文属性,以便我可以手动指定要使用的存储(消除了 MagicalRecord 单例访问模式的大量细节)。
- (小心地)玩弄我的实际数据库(我什至不愿意考虑这个)。
这些似乎都不是特别好的解决方案,所以我希望有人能看到我愚蠢地忽略的更好的解决方案。
【问题讨论】:
标签: ios objective-c xcode core-data magicalrecord