我在使用“假”商店进行单元测试时遇到问题。我通过将其框架文件夹添加到我的项目并用 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 单例访问模式的大量细节)。
- 玩(小心地)我的实际数据库(我什至不愿意考虑这个)。
这些似乎都不是一个特别好的解决方案,所以我希望有人能看到一个我愚蠢地忽略的更好的解决方案。