2011-12-12 58 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