我有一个 iOS 应用程序,它使用 Core Data 和出色的Magical Record来管理持久性。这是我的问题:
我们现有的单元测试结构使用标准的 iOS 应用程序测试。我想为每个测试使用一个干净的内存数据库来运行我的单元测试。我按照本文中的说明使用 Magical Record 进行设置。该问题出现在运行应用程序测试的实现中。因为应用程序测试首先运行应用程序包,然后是单元测试包,所以在我的内存存储调用有机会运行之前调用了我设置核心数据堆栈的正常调用。
我用谷歌搜索了这个问题一整夜,发现了几篇很有前途的文章:
这些问题是他们使用单例数据访问对象作为进入其核心数据调用的网关。我的应用程序不是这样设置的。我正在使用对 Magical Record 的调用来获取和保存数据。
有没有人遇到过这个问题?如果是这样,我是否遗漏了一些细节,这些细节允许我在测试运行时将数据设置交换到内存存储中?
编辑:添加代码
在我的应用程序委托中,我有这个:
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[MagicalRecord setupAutoMigratingCoreDataStack];
// Other setup code
return YES;
}
在每个处理核心数据的单元测试类中,我都有这个:
-(void)setUp{
[super setUp];
[MagicalRecord setDefaultModelFromClass:[self class]];
[MagicalRecord setupCoreDataStackWithInMemoryStore];
}
-(void)tearDown{
[MagicalRecord cleanUp];
[super tearDown];
}
我可以看到每个测试都调用了应用程序委托代码和设置/拆卸,但我不确定如何使测试的默认核心数据堆栈使用内存存储。我还将 .xcdatamodel 文件添加到单元测试目标中。