I have been developing an iphone application using a domain model, and have put off the persistence aspect of the app until now. Core Data looks like a really good solution since I already have a well defined model but I am running into a snag with my existing unit tests.
Here is simple example of what I have now:
- (void)test_full_name_returns_correct_string {
Patient *patient = [[Patient alloc] init];
patient.firstName = @"charlie";
patient.lastName = @"chaplin";
STAssertTrue([[patient fullName] isEqualToString:@"charlie chaplin"], @"should have matched full name");
}
How can I make this work once my Patient object extends from NSManagedObject and uses @dynamic for the firstName and lastName properties?
Has anyone else run into this type of this with Core Data? Thanks.
You need to build a Core Data stack, either within each method or in
-setUpand then tear it down. Using anNSInMemoryPersistentStorewill keep things fast and in-memory for your unit tests. Add a@property (nonatomic,retain) NSManagedObjectContext *mocto your TestCase subclass. Then:Your test method then looks like:
assuming your entity is named
Person. There was a memory leak in your version of the method, by the way; patient should be-release‘d in the non-Core Data version (insertNewObjectForEntityForName:managedObjectContext:returns an autoreleased instance).