Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何使用CoreData进行单元测试?_Iphone_Unit Testing_Core Data - Fatal编程技术网

Iphone 如何使用CoreData进行单元测试?

Iphone 如何使用CoreData进行单元测试?,iphone,unit-testing,core-data,Iphone,Unit Testing,Core Data,从CoreData模板开始,我构建了一个iphone应用程序,它使用CoreData操作数据模型。工作至今 现在我决定,我需要一些“单元”测试来检查核心数据模型是否被正确操作(到目前为止,我只做了手动检查,并直接用CoreDataEditor检查了数据库)。我跟着 关于如何在Xcode中设置单元测试。到目前为止,这对逻辑和应用程序测试都有效。但是,我无法让“单元”测试与CoreData后端一起工作(它找不到我的数据模型,我不知道要包含什么或链接什么等等) 是否有关于如何对核心数据iphone应

从CoreData模板开始,我构建了一个iphone应用程序,它使用CoreData操作数据模型。工作至今

现在我决定,我需要一些“单元”测试来检查核心数据模型是否被正确操作(到目前为止,我只做了手动检查,并直接用CoreDataEditor检查了数据库)。我跟着

关于如何在Xcode中设置单元测试。到目前为止,这对逻辑和应用程序测试都有效。但是,我无法让“单元”测试与CoreData后端一起工作(它找不到我的数据模型,我不知道要包含什么或链接什么等等)

是否有关于如何对核心数据iphone应用程序进行“单元”测试的指针/说明

PS:我知道使用数据库后端进行测试并不是严格意义上的“单元”测试。我不在乎测试是在带有真实应用程序(ApplicationTesting)的模拟器上进行的,还是只是一个专门用于单元测试(LogicTest)的核心数据后端,我会在设置过程中填充一些测试对象

编辑:我找到了 和 但现在我遇到了中描述的问题
... 嗯,除了我有错误代码134:-((有什么想法吗?

好的。我让它工作了

  • 按此处所述创建逻辑测试(设置逻辑测试部分):

  • 手动将CoreData.framework添加到新创建的逻辑测试目标:将其从应用程序目标拖动到逻辑测试目标(文件夹“linkbinary with libraries”)

  • 右键单击*.xcdatamodeld并选择Get Info->Targets。选择Logic Tests目标(出于某种奇怪的原因,在我的例子中没有选择实际的应用程序目标…但这是可行的)

  • 在单元测试类(您在步骤1:LogicTests.m中创建)中添加以下方法:

    - (void) setUp {
    
       NSArray *bundles = [NSArray arrayWithObject:[NSBundle bundleForClass:[self class]]];
       NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:bundles];
       STAssertNotNil(mom, @"ManangedObjectModel ist nil");
    
       NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];
       STAssertTrue([psc addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:NULL] ? YES : NO, @"Should be able to add in-memory store");    
    
       self.context = [[NSManagedObjectContext alloc] init];
       self.context.persistentStoreCoordinator = psc;
    
       [mom release];
       [psc release];
    }
    

  • 现在,您已经设置了一个具有核心数据支持的逻辑测试。通过构建LogicTests目标,可以隔离(无模拟器)完成逻辑测试。为此,将创建一个临时内存数据库。在您的测试方法中,您现在可以执行以下操作:

    - (void) testStuff {    
         NSManagedObject *managedObj = [NSEntityDescription insertNewObjectForEntityForName:@"Account" inManagedObjectContext:self.context];
    
         [managedObj setValue:[NSNumber numberWithInt:90000] forKey:@"id"];
    
         NSError *error = nil;
         if (![self.context save:&error]) {
             STFail(@"Fehler beim Speichern: %@, %@", error, [error userInfo]);
         }
    }
    

    希望这有助于……玩得开心!

    很遗憾,该链接再也找不到任何地方了。我发现该链接指向的示例代码似乎是该链接的同伴,但该链接已不再有效: