gpt4 book ai didi

ios - 使用iOS中的OCUnit在XCode 4.5中使用Core Data对象进行单元测试

转载 作者:行者123 更新时间:2023-12-01 18:28:09 25 4
gpt4 key购买 nike

是否有一种简单的方式,出于的测试原因,可以创建NSManagedObjects,而无需使用为发行版Application创建的托管对象上下文?

我现在已经进行了几周的Core Data编码,但是细节上仍然存在一些问题……为什么我不能只分配和初始化对象进行测试?我是否真的需要处理第二个持久性存储/托管对象上下文(以及哪个上下文)?

我必须测试一些在我的NSManagedObject子类中编写的方法...

最佳答案

相信我,您不想在不使用MOC的情况下测试核心数据对象。您最多只能做不健全的事情。

但是,如果您不想使用实际的数据库,请使用内存中存储。设置非常简单。实际上,这就是我自己进行许多单元测试所使用的。

不过,我警告您。 SQL存储和内存存储在许多方面的行为都不相同。最常见的问题是谓词。阅读文档,以确保您的谓词正确。

我要说的是,在测试期间,您可以使用内存中的MOC,但是您应该具有在实际数据库本身上运行所有测试的配置,以确保它可以正常工作。为了提高速度,也许您将内存数据库用于常规用途,而将实际的数据库用于计划的连续集成测试。

例如,您可以执行以下操作来创建内存中的MOC ...

- (NSManagedObjectContext*)managedObjectContextWithConcurrencyType:(NSManagedObjectContextConcurrencyType)concurrencyType {
NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:nil];
STAssertNotNil(mom, @"Can not create MOM from main bundle");

NSPersistentStoreCoordinator *psc = [[MyPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];
STAssertNotNil(psc, @"Can not create persistent store coordinator");
NSPersistentStore *store = [psc addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:0];
STAssertNotNil(store, @"Can not create In-Memory persistent store");

MyManagedObjectContext *moc = [[MyManagedObjectContext alloc] initWithConcurrencyType:concurrencyType];
moc.persistentStoreCoordinator = psc;

return moc;
}

关于ios - 使用iOS中的OCUnit在XCode 4.5中使用Core Data对象进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11300026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com