2011-12-12 59 views
1

对于我的应用,我使用的是MVC-Store模型。在单元测试之前备份CoreData

类DataStore包含保存应用程序数据的单例对象defaultstore。 一切正常,但我的单元测试出现了一些问题,因为我不想让测试搞乱数据。

我想做到以下几点,但我不知道如何:

- (void)setUp 
{ 
    [super setUp]; 

    //Backup my data 
    //Clear coredata 
} 

- (void) testCreateSomeData 
{ 
    //..Create some data, add it to the store, do some tests, etc.. 
}  

- (void)tearDown 
{ 
    Put back my original data 
    [super tearDown]; 
} 

哦顺便说一句,数据存储的init方法看起来是这样的,也许这就是一些帮助。

- (id) init 
{ 
    //If we allready have a singleton object 
    if(defaultStore){ 
     return defaultStore; 
    } 
    self = [super init]; 

    // Read in our .xcdatamodel file 
    model = [[NSManagedObjectModel mergedModelFromBundles:nil] retain]; 

    NSPersistentStoreCoordinator *psc = 
    [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; 

    NSString *path = pathInDocumentDirectory(@"store.data"); 
    NSURL *storeURL = [NSURL fileURLWithPath:path]; 
    NSError *error = nil; 

    if (![psc addPersistentStoreWithType:NSSQLiteStoreType 
          configuration:nil 
            URL:storeURL 
           options:nil 
            error:&error]) { 
     [NSException raise:@"Open failed" format:@"Reason: %@", [error localizedDescription]]; 
    } 

    // Create the managed object context 
    context = [[NSManagedObjectContext alloc] init]; 
    [context setPersistentStoreCoordinator:psc]; 
    [context setUndoManager:nil]; 

    [psc release]; 
    return self; 
} 

回答

2

一个选项是让指定的init接受一个文件名,然后在默认的初始化器中传递正常的文件名。然后,您的测试可以在单独的文件中创建DataStore,在运行测试之前和之后删除它,而不触及非测试数据。

+0

感谢stevex,我在单元测试构建方案中添加了一个环境变量var,并检查了当我加载数据时是否设置了var。如果设置了var,我更改storeURL的路径并加载一个testStore! – Tieme