1

リリース アプリケーション用に作成されたマネージド オブジェクト コンテキストを使用せずに、テストの目的で NSManagedObjects を作成する簡単な方法はありますか?

Core Data のコーディングに数週間取り組んでいますが、まだ詳細に問題があります...なぜ、テストのためにオブジェクトを割り当てて初期化できないのでしょうか? 2 番目の永続ストア/管理対象オブジェクト コンテキスト (およびどちら) を処理する必要がありますか?

NSManagedObject サブクラスで記述されたいくつかのメソッドをテストする必要があります ...

4

1 に答える 1

4

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;
}
于 2012-07-02T23:09:39.247 に答える