【问题标题】:Unit Testing with Core Data objects in XCode 4.5 using OCUnit in iOS-Development在 iOS 开发中使用 OCUnit 对 XCode 4.5 中的核心数据对象进行单元测试
【发布时间】:2012-07-02 19:34:00
【问题描述】:

是否有一种简单的方法来出于测试原因创建 NSManagedObjects,而不使用为发布应用程序创建的托管对象上下文?

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

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

【问题讨论】:

    标签: ios unit-testing core-data xcode4 ocunit


    【解决方案1】:

    相信我,你不想在不使用 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;
    }
    

    【讨论】:

    • 谢谢,我试试这个!但我有一个问题:你会把示例代码放在哪里?在每一个测试课上?这样做的最佳做法是什么?
    • 还有一个问题:你为什么要继承 NSPersistantStoreCoordinator 和 NSManagedObjectContext 呢?我可以不用子类化吗?
    • 还有一个问题:即使在将“#import ”放入我的 .h 文件之后,我仍然收到所有核心数据类的 Apple Mach-O 链接器错误。 .
    • 我有一个简单的实用程序文件,其中包含用于测试的内容。该代码仅创建本机类型的对象。根本不涉及子分类。您必须将 CoreData 框架添加到您的项目中 -- “Build Phases” --> “Link Binary with Libraries” 并添加 CoreData
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多