MOC を使用せずにコア データ オブジェクトをテストする必要はありません。せいぜい不健全なことをしなければなりません。
ただし、実際のデータベースを使用したくない場合は、メモリ内ストアを使用してください。設定はとても簡単です。実際、これは私自身の多くの単体テストに使用するものです。
ただし、注意します。SQL ストアとインメモリ ストアで同じように動作しないものが多数あります。最も一般的な問題は、述語に関するものです。ドキュメントを読んで、述語が正しいことを確認してください。
テスト中にインメモリ MOC を使用できますが、実際のデータベース自体ですべてのテストを実行して動作することを確認する構成が必要です。速度のために、通常の使用にはメモリ内データベースを使用し、スケジュールされた継続的統合テストには実際のデータベースを使用します。
例として、インメモリMOCを作成するためにこのようなことを行うことができます...
- (NSManagedObjectContext*)managedObjectContextWithConcurrencyType:(NSManagedObjectContextConcurrencyType)concurrencyType {
NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:nil];
STAssertNotNil(mom, @"Can not create MOM from main bundle");
NSPersistentStoreCoordinator *psc = [[MyPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];
STAssertNotNil(psc, @"Can not create persistent store coordinator");
NSPersistentStore *store = [psc addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:0];
STAssertNotNil(store, @"Can not create In-Memory persistent store");
MyManagedObjectContext *moc = [[MyManagedObjectContext alloc] initWithConcurrencyType:concurrencyType];
moc.persistentStoreCoordinator = psc;
return moc;
}