2012-07-02 27 views
1

使用的OCUnit对象是否有简单出路在那里创建用于测试的原因NSManagedObjects不以用于发布应用程序创建的托管对象上下文?单元测试的XCode 4.5的iOS开发

我现在进入核心数据编码几个星期,但仍然有一些问题的细节...为什么我不能只分配和初始化对象进行测试?我真的必须处理第二个持久性存储/管理对象上下文(以及哪一个)?

我一定要考写在我的NSManagedObject子类的一些方法...

回答

4

相信我,你不想来测试核心数据对象,而无需使用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; 
} 
+0

谢谢,我会努力的!但我有一个问题:你会在哪里放置示例代码?在每一个测试课上?这样做的最佳做法是什么? – CGee

+0

还有一个问题:为什么在那里继承NSPersistantStoreCoordinator和NSManagedObjectContext?我可以做到没有子类化? – CGee

+0

还有一个问题:即使在将“#import ”放入我的.h文件后,我得到的是所有核心数据类的Apple Mach-O链接程序错误... – CGee