使用SenTestCase类的核心数据:意外错误

时间:2012-12-26 13:43:30

标签: ios cocoa-touch core-data sentestingkit

我正在开发一个应用程序,它使用核心数据从sqlite db存储和检索数据。为此,我创建了一个单独的类,其作用类似于数据链接层 - LocalDBController

下面是其中一个方法的实现--selectAddressWithAddressId:

- (NSDictionary *)selectAddressWithAddressId:(NSString *)addressId
{
    NSDictionary *dictToReturn = nil;

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"address_id == %@",addressId];
    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Address" inManagedObjectContext:self.moc]; // returning nil when invoked from test case class
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entityDescription];
    [request setPredicate:predicate];

    NSError *err = nil;
    NSArray *array = [self.moc executeFetchRequest:request error:&err];

    // some more code...

    return dictToReturn;
}

现在我正在尝试为它实现一个测试用例类(SenTestCase类)。

我在LocalDBController类中编写了下面的init方法,因此如果环境变量的值为'Run',它使用默认持久存储,如果环境变量的值为'Test',则使用内存持久存储:

- (id)init
{
    if (self = [super init]) {
        // initializing moc based on if run setting is used or test is used
        if ([[[[NSProcessInfo processInfo] environment] objectForKey:@"TARGET"] isEqualToString:@"TEST"]) {

            NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:nil];
            NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];
            [psc addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:NULL];
            self.moc = [[NSManagedObjectContext alloc] init];
            self.moc.persistentStoreCoordinator = psc;
        }
        else
        {
            self.moc = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
        }

    }

    return self;
}

在我的测试类中,我试图调用以下方法:

STAssertNotNil([self.localDBController selectAddressWithAddressId:@"123"], @"No data found"); 

问题是 -

  

在这种情况下, selectAddressWithAddressId:方法中获得的 entityDescription 的值为nil,尽管self.moc的值不是nil。所以   在控制台中抛出此异常消息:引发   executeFetchRequest:error:获取请求必须具有实体..

如果我从我的测试用例包中没有包含的类执行上面的方法,比如appDelegate,它可以正常工作。

如果我做错了什么,有人可以建议我吗?

0 个答案:

没有答案