objective-c - 单元测试前备份CoreData

标签 objective-c ios unit-testing core-data

对于我的应用程序,我使用的是 MVC 商店模型。

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];
}

哦,顺便说一句,DataStore 的 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;
}

最佳答案

一个选项是指定一个带有文件名的初始化程序,然后让默认初始化程序传入普通文件名。然后你的测试可以在一个单独的文件中创建一个数据存储,在运行测试之前和之后删除它,而不触及你的非测试数据。

关于objective-c - 单元测试前备份CoreData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8478347/

相关文章:

objective-c - Swift 代码看不到在 Objective-C 类别中声明的方法

iphone - 按下 UITextField 时防止显示默认键盘

ios - 编译iOS应用所需的最低MacOS版本

ios - Spotify - 如何暂停轨道和恢复轨道

node.js - 对 Jest 手动模拟进行断言

javascript - Jest 监视模块功能

unit-testing - MassTransit 服务总线配置和单元测试

ios - (NSDictionary *) labelAttrs = 0x00000001

java - 有没有办法从 java 执行 Objective-C 应用程序?

ios - PerformSegue 被调用但实际上并未转至 VC2? ( swift 3.0)