user7372676
user7372676

Reputation:

Unit testing with core data in objective c

My coredata methods are here. How to write unit test case to check this.

Method to save to coredata

- (void)saveUserDetails:(Model *)userDetail {
if(userDetail != nil) {
    UserEntity *user = [NSEntityDescription insertNewObjectForEntityForName:@“EntityName” inManagedObjectContext:[self sharedContext]];

    NSArray *fetchArray = [self fetchUserWithUsername:userDetail.username];

    if ([fetchArray count] == 0) {
        user.username = userDetail.username;
        [self saveContext];
    }
}
}

Method to fetch from coredata

- (NSArray *)fetchUserWithUsername:(NSString *)username {
if (username != nil) {
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    NSEntityDescription *userEntity = [NSEntityDescription entityForName:@“EntityName” inManagedObjectContext:[self sharedContext]];
    [fetchRequest setEntity:userEntity];
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"username = %@", username];

    NSError *error;
    NSArray *fetchedObjects = [[self sharedContext] executeFetchRequest:fetchRequest error:&error];

    return fetchedObjects;
}

return nil;
}

Upvotes: 0

Views: 406

Answers (1)

trapper
trapper

Reputation: 11993

Create an in-memory store and inject this into your object.

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MyResource" withExtension:@"momd"];
NSManagedObjectModel *mom = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];
XCTAssertTrue([psc addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:NULL] ? YES : NO, @"Should be able to add in-memory store");

NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
context.persistentStoreCoordinator = psc;

Upvotes: 1

Related Questions